按两个字段分组后查找max(avg(value))

bprjcwpo  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(409)

表名为 c_list .

Country   City      Rating   Date
------------------------------------
France    Brest     95       24092016       
France    Brest     98       27092016
France    Brest     95       03102016
France    Lille     100      26092016     
France    Lille     92       28092016
Japan     Tokyo     98       02102016

有50多个不同的国家,每个国家几乎没有城市。而每个城市可能都有一行以上的记录。我想选择一个平均评分最高的城市**(与本国的城市进行比较),然后与不同国家的所有其他城市进行比较。因此,最终的查询应该以max(avg(rating))和desc顺序显示所有国家和他们的一个城市。示例输出:

Country   City        max(avg(rating))   
-------------------------------------
 USA      New York    97.25
 UK       Cardiff     96.70
 Germany  Greven      96.50
 Turkey   Afyon       94.88
 France   Guipavas    94.10
 Canada   Cartwright  91.35

我只能得到一个国家的最大值(平均值)。我需要帮助。

SELECT top 1 country, city, Avg(rating) AS Ratings
FROM c_list
where country = 'France'
GROUP BY city, country
order by Ratings desc

我想要的结果和世界小姐大赛差不多。先和你们国家的本地选手比赛并获胜。下一步(我的最终结果集)是与其他国家的优胜者竞争,并用他们在本国吃得更多的平均分(rating)对他们进行排名。

mrzz3bfm

mrzz3bfm1#

基表:
选择t.*从temp\u lax t country city rating 1 france brest 95 2 france brest 98 3 france brest 95 4 france lille 100 5 france lille 92 6 japan tokyo 98
查询:
从temp\u lax t1 group by t1.country中选择t1.country,t1.city,avg(t1.rating)rating,t1.city having avg(t1.rating)=(从temp\u lax t2中选择max(avg(rating)),其中t1.country=t2.country group by t2.city)order by rating desc
输出:乡村城市评级1日本东京98 2法国里尔96 3法国布雷斯特96
请让我知道,如果你正在寻找不同的结果集。

aiazj4mn

aiazj4mn2#

如果我没有错的话,你在找这个

SELECT country, 
       city, 
       Avg(rating) AS Ratings 
FROM   c_list A 
GROUP  BY city, 
          country 
HAVING Avg(rating) = (SELECT TOP 1 Avg(rating) AS Ratings 
                      FROM   c_list B 
                      WHERE  a.country = b.country 
                      GROUP  BY city 
                      ORDER  BY ratings DESC) 
ORDER  BY ratings DESC

注意:如果您正在使用 Mysql 替换 TOP 关键字 LIMIT

相关问题