2014-08-27 92 views
-1

如何進行查詢,該查詢返回特定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 
+1

http://en.wikipedia.org/wiki/Where_%28SQL%29令人驚訝的是,你知道sql足夠好地完成加入的查詢,但知道它太糟糕了,你從來沒有聽說過如何使用'where'條款。 – 2014-08-27 19:04:37

+0

然後添加'group by content.id'。 – 2014-08-27 19:05:14

回答

1

添加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())是應用程序對團體說謊並不是全部結果。

+0

非常感謝你 – tjkjgl 2014-08-27 19:06:11

1

您在大多數數據庫中查詢失敗。問題是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 byselect所有的非聚集列。

相關問題