這裏是微不足道的解決方案。它會返回三行,這將不包括行,其中計數爲0:
SELECT user_id, COUNT(*) AS c
FROM user_item
WHERE item_id = 324
GROUP BY user_id
ORDER BY c DESC
LIMIT 10
+---------+---+
| user_id | c |
+---------+---+
| 1 | 2 |
| 4 | 1 |
| 3 | 1 |
+---------+---+
如果你想零個計數以及隨後至少有兩種可能的解決方案。第一個是您移動where子句來算功能:
SELECT user_id, COUNT(CASE WHEN item_id = 324 THEN 1 END) AS c
FROM user_item
GROUP BY user_id
ORDER BY c DESC
LIMIT 10
+---------+---+
| user_id | c |
+---------+---+
| 1 | 2 |
| 4 | 1 |
| 3 | 1 |
| 2 | 0 |
+---------+---+
第二個採用左連接,使表中的所有用戶都包括在內,以及零數,並可能給你表現稍好:
SELECT user_item.user_id, COUNT(foo.item_id) AS c
FROM user_item
LEFT JOIN (SELECT 324 AS item_id) AS foo ON user_item.item_id = foo.item_id
GROUP BY user_item.user_id
ORDER BY c DESC
LIMIT 10;
你應該使用組(?但爲什麼user_2 ITEM_COUNT = 0 ...應該是1太) – scaisEdge
和'COUNT()'函數 –
你真的想第4行具有零計數? –