这里是微不足道的解决方案。它会返回三行,这将不包括行,其中计数为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行具有零计数? –