我正在尝试按国家/地区仅选择最大地图名称。当我提到“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
备注:如果存在平局,则只返回该国家/地区的一行。第一个找到了
任何帮助将不胜感激。先谢谢。
答案 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一个带有演示的方形小说。