作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否可以列出仅包含唯一海岸和地区的城市名称? (即同一海岸同区域有多个城市,应排除)
例子:
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 子句,但它仍然给我和以前一样的错误。这是我遇到的错误:
错误 1055 (42000); SELECT 列表的表达式 #1 不在 GROUP BY 子句中并且包含非聚合列 run_iu98jon.MAP.CITY,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
最佳答案
您已经非常接近了,您只需要一个 HAVING 子句,它类似于分组依据聚合指标的 WHERE 子句。
SELECT CITY
FROM MAP
GROUP BY COAST, REGION
HAVING COUNT(*) = 1;
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 问题似乎很愚蠢。我将其作为学习练习包括在内 ;)
关于mysql - SQL GROUP BY 两个不同的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601716/
我是一名优秀的程序员,十分优秀!