gpt4 book ai didi

mysql - SQL GROUP BY 两个不同的组

转载 作者:可可西里 更新时间:2023-11-01 08:03:07 35 4
gpt4 key购买 nike

是否可以列出仅包含唯一海岸和地区的城市名称? (即同一海岸同区域有多个城市,应排除)

例子:

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;


编辑:这是 SQL Fiddle 链接: 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 问题似乎很愚蠢。我将其作为学习练习包括在内 ;)

关于mysql - SQL GROUP BY 两个不同的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601716/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com