按国家/地区仅选择max mapname - sql server

时间:2014-06-11 15:04:51

标签: sql-server

我正在尝试按国家/地区仅选择最大地图名称。当我提到“max mapname”时,我指的是该地区出现次数最多的“mapname”的值。我正在使用Ms Sql Server。

这是tblsurvey的表结构:

[country] [mapname]
    data:
    BR  MapQuest
    CA  OpenStreetMap
    CN  ArcGIS
    DE  Google Maps
    GR  Bing Maps
    IT  Google Maps
    US  Google Maps
    US  Bing Maps
    US  SAS.Planet
    US  Google Maps

查询:

select country, mapname as mapnamemax
from tblsurvey s1
group by country, mapname
having count(mapname) = (select max(cnt)
                        from
                        (
                         select count(mapname) as cnt
                         from tblsurvey s2
                         where s1.country = s2.country and
                               s1.mapname = s2.mapname
                         group by mapname
                        )rc 
                        )

这是我目前得到的(这是当前和不正确的查询输出)

current output:
CN  ArcGIS
GR  Bing Maps
US  Bing Maps
DE  Google Maps
IT  Google Maps
US  Google Maps
BR  MapQuest
CA  OpenStreetMap
US  SAS.Planet

这就是我想要的。 (这是所需的查询输出)

desired output:
BR  MapQuest
CA  OpenStreetMap
CN  ArcGIS
DE  Google Maps
GR  Bing Maps
IT  Google Maps
US  Google Maps

备注:如果存在平局,则只返回该国家/地区的一行。第一个找到了

任何帮助将不胜感激。先谢谢。

1 个答案:

答案 0 :(得分:2)

这是一种方式(如果是平局,则任意返回一个):

SELECT  DISTINCT 
        A.country,
        B.mapname
FROM tblsurvey A
OUTER APPLY (SELECT TOP 1 mapname
             FROM tblsurvey 
             WHERE country = A.country
             GROUP BY mapname
             ORDER BY COUNT(*) DESC) B

here is一个带有演示的方形小说。