我有下表:
| Id | referral |
|----|----------|
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
当用户的引荐来源栏中为0时,表示他没有点击任何引荐链接。如果有数字,则表示另一个用户的ID。
所以现在我只想要这种输出:
| Id | referral | referred_count |
|----|----------|----------------|
| 1 | 0 | 2 |
| 2 | 0 | 1 |
| 3 | 1 | 0 |
| 4 | 2 | 0 |
| 5 | 1 | 0 |
有没有办法仅通过一个mysql查询获得这种输出?我尝试了很多事情,但被卡住了。
答案 0 :(得分:1)
一种简单的方法使用相关子查询:
select t.*,
(select count(*) from t t2 where t2.referral = t.id) as referred_count
from t;
答案 1 :(得分:0)
您也可以使用表的JOIN
来做到这一点:
select r1.id, r1.referral, count(r2.referral) AS referred_count
from ref r1
left join ref r2 on r2.referral = r1.id
group by r1.id
输出:
id referral referred_count
1 0 2
2 0 1
3 1 0
4 2 0
5 1 0