如何進行查詢,該查詢返回特定ID的值並非全部。MySql:如何進行子查詢並對兩個表中id相同的所有行進行計數
SELECT content.id, count(case likes.type when 'p' then 1 else null end) as p
FROM content
JOIN likes on likes.content_id = content.id
此代碼返回:
ID p
1 18
但我希望它:
ID p
1 12
2 4
3 2
如何進行查詢,該查詢返回特定ID的值並非全部。MySql:如何進行子查詢並對兩個表中id相同的所有行進行計數
SELECT content.id, count(case likes.type when 'p' then 1 else null end) as p
FROM content
JOIN likes on likes.content_id = content.id
此代碼返回:
ID p
1 18
但我希望它:
ID p
1 12
2 4
3 2
添加group by
SELECT content.id,
sum(likes.type = 'p') as p
FROM content
JOIN likes on likes.content_id = content.id
GROUP BY content.id
然後,聚集函數(即count()
)是應用程序對團體說謊並不是全部結果。
非常感謝你 – tjkjgl 2014-08-27 19:06:11
您在大多數數據庫中查詢失敗。問題是content.id
未彙總在select
中,但您正在使用聚合函數。
這是一個簡單的問題來解決:
SELECT content.id, count(case likes.type when 'p' then 1 else null end) as p
FROM content
JOIN likes on likes.content_id = content.id
GROUP BY content.id;
然而,在一般情況下,你應該小心和始終包括在group by
在select
所有的非聚集列。
http://en.wikipedia.org/wiki/Where_%28SQL%29令人驚訝的是,你知道sql足夠好地完成加入的查詢,但知道它太糟糕了,你從來沒有聽說過如何使用'where'條款。 – 2014-08-27 19:04:37
然後添加'group by content.id'。 – 2014-08-27 19:05:14