1

我有一张users这样的桌子:

id user refid
1  a    null
2  b    1
3  c    1
4  d    2
5  f    3

我需要选择用户,按 id 和每个用户的每个 refid 的计数分组例如,

id    user count
1      a     2
2      b     1
3      c     1
4      d     0
5      4     0

这是我尝试过的:

SELECT u1 . id,u1 . user , count( u1.id ) count FROM users u1 
LEFT JOIN users u2 ON u1.id = u2.refid GROUP BY u1.id

返回

id    user count
1      a     2
2      b     1
3      c     1

我怎样才能让 mysql 返回那些 id 没有被用作 refid 的人?

4

2 回答 2

2

这有效:

SELECT u1 . id,u1 . user , count( u2.refid ) count FROM users u1 
LEFT JOIN users u2 ON u1.id = u2.refid GROUP BY u1.id

COUNT只计算非空值,因此您需要在 中指定一列u2,因为那将是NULL没有匹配的时候。

小提琴

于 2013-10-05T11:49:54.237 回答
1

您可以使用SUM(IF(...,0,1))仅计算具有特定属性的行。我认为以下应该有效,尽管我不确定为什么输出中缺少最后两行。

SELECT u1.id, u1.user, SUM(IF(u2.id IS NULL,0,1)) count
FROM users u1 
LEFT JOIN users u2 ON u1.id=u2.refid
GROUP BY u1.id
于 2013-10-05T11:44:51.903 回答