我试图弄明白正确的使用方式 JOIN
, COUNT(*)
, 和 GROUP BY
做一个非常简单的查询。我实际上已经让它工作了(见下文),但从我读到的内容来看,我正在使用一个额外的 GROUP BY
我不应该是。
(注意:下面的问题不是我的实际问题(它处理更复杂的表),但我试图提出一个类似的问题)
我有两个表:
Table: Person
-------------
key name cityKey
1 Alice 1
2 Bob 2
3 Charles 2
4 David 1
Table: City
-------------
key name
1 Albany
2 Berkeley
3 Chico
我想对返回的 People(带有一些
WHERE
子句)进行查询如果我做
SELECT COUNT(Person.key) AS count, City.key AS cityKey, City.name AS cityName
FROM Person
LEFT JOIN City ON Person.cityKey = City.key
GROUP BY Person.cityKey, City.name
我得到了我想要的结果
count cityKey cityName
2 1 Albany
2 2 Berkeley
但是,我已经 read扔在最后一部分
GROUP BY
条款( City.name
)只是为了让它工作是错误的。那么这样做的正确方法是什么?我一直在尝试用谷歌搜索答案,但我觉得有一些基本的东西我没有得到。
最佳答案
我不认为在这种情况下它是“错误的”,因为您在城市名称和城市 key 之间建立了一对一的关系。你可以重写它,这样你就可以加入一个子选择,通过键来获取城市的人数,再次进入城市表以获取名称,但这是有争议的,这会更好。我猜这是一个风格和观点的问题。
select PC.ct, City.key, City.name
from City
join (select count(Person.key) ct, cityKey key from Person group by cityKey) PC
on City.key = PC.key
如果我的 SQL 不是太生疏:-)
关于sql - 在 GROUP BY 和 COUNT 之后加入另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080024/