是否可以列出仅包含唯一海岸和地区的城市名称? (即同一海岸和地区有多个城市,因此应将其排除在外)
示例:
TABLE_NAME = MAP
City Coast Region
New York East 1
Buffalo East 1
LA West 2
Seattle West 1
San Jose West 3
Florida East 4
Boston East 2
San Diego West 2
在这个例子中,我希望输出为:
Seattle
San Jose
Florida
Boston
纽约和布法罗被省略,因为它们共享相同的海岸和地区,就像洛杉矶和圣地亚哥一样。
我试过了:
SELECT DISTINCT COAST, REGION
FROM MAP
给了我费用和地区,但不是城市名称。
我试过了:
SELECT CITY
FROM MAP
GROUP BY COAST, REGION
但它给了我一个错误(见下面的错误)。
感谢您的帮助!
编辑: 我尝试添加HAVING子句,但它仍然给我与以前相同的错误。这是我的错误:
ERROR 1055(42000); SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列run_iu98jon.MAP.CITY,它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by
不兼容答案 0 :(得分:4)
你非常接近,你只需要一个HAVING子句,就像分组聚合度量的WHERE子句一样。
SELECT CITY
FROM MAP
GROUP BY COAST, REGION
HAVING COUNT(*) = 1;
<小时/> 编辑:这是SQL小提琴链接:http://sqlfiddle.com/#!9/8da83b/2/0
<小时/> 编辑3:这似乎是不必要的复杂,但它可以工作,并避免使用任何未分组的字段。
SELECT City
FROM Map
INNER JOIN (
SELECT Coast, Region, COUNT(*) as RowCount
FROM Map
GROUP BY Coast, Region
) AS CoastRegion ON
Map.Coast = CoastRegion.Coast AND
Map.Region = CoastRegion.Region
WHERE
CoastRegion.RowCount = 1
顺便说一句,使用StackOverflow解决HackerRank问题似乎很愚蠢。我将此作为一项学习练习;)