我有一张像这样的表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的人?
答案 0 :(得分: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
。
答案 1 :(得分: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