按两个字段分组后查找MAX(平均(值))

时间:2016-10-05 17:16:28

标签: mysql sql ms-access

表名为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多个不同的国家,每个国家的城市都很少。每个城市可能有多行记录或更多。我想选择一个具有最高平均评级城市(与其所在国家/地区的城市比较),然后与不同国家/地区的所有其他城市进行比较。因此,最终查询应显示所有国家及其 ONE City ,其中包含max(平均值(评级))和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

(已编辑)我想要的结果与世界小姐比赛相似。首先竞争并赢得您所在国家的本地选手。接下来(我的最终结果集)是与来自其他国家的获胜者竞争,并使用他们在自己的国家食用的平均值(等级)将他们排在第一位。

2 个答案:

答案 0 :(得分:1)

如果没有错,你正在寻找这个

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

答案 1 :(得分:0)

  

基准表:

从temp_lax t中选择t。*     国家城市评级 1法国布雷斯特95 2法国布雷斯特98 3法国布雷斯特95 4法国里尔100 5法国里尔92 6日本东京98

查询:

选择t1.country,t1.city,Avg(t1.Rating)评级   来自temp_lax t1  由t1.country,t1.city组成 有平均(t1.rating)=(选择最大(平均(评级))                            来自temp_lax t2                           在哪里t1.country = t2.country                           GROUP BY t2.city)  通过评级desc排序

输出:     国家城市评级 1日本东京98 2法国里尔96 3法国布雷斯特96

如果您正在寻找不同的结果集,请告诉我。

  

相关问题