我試圖理解使用JOIN
,COUNT(*)
和GROUP BY
進行非常簡單的查詢的正確方法。我實際上已經開始工作了(見下文),但從我讀過的內容來看,我正在使用額外的GROUP BY
,我不應該這樣做。在GROUP BY和COUNT之後加入另一個表
(注:下面的問題是不是我的實際問題(其中用更復雜的表交易),但我試圖拿出一個類似的問題)
我有兩個表:
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
我想要做的人查詢(有一些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
)只是爲了讓它工作是錯誤的。
那麼有什麼正確的方法來做到這一點?我一直試圖谷歌的答案,但我覺得有一些基本的東西,我只是沒有得到。
我認爲這可能是一個錯字,我相信他希望他的「group by」在他的「SELECT」條款中包含非聚合列。然而,我可能是錯的。 – Pointy 2010-06-20 16:58:10
對於第二個例子,你在'group by'部分有一堆東西;從我在帖子中鏈接的頁面中,他們說這是錯誤的做法。但是,「MIN」部分起作用; (我認爲只適用於'int'類型的列) – 2010-06-20 16:59:49
@Craig S:如果我讀了你正確鏈接的帖子,他們只是說你應該在你選擇的列上按'分組'。我的第二個例子正確。這篇文章還提到如果你做錯了,你會得到「惱人的錯誤」。 MySQL是唯一的數據庫,將接受「不正確」的方式沒有「煩人的錯誤」:) – Andomar 2010-06-20 17:03:33