У меня есть следующая таблица:
| Id | referral |
|----|----------|
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
Когда пользователь имеет 0 в реферальных столбцах, это означает, что он не нажал на какую-либо реферальную ссылку. Если у него есть номер, он ссылается на идентификатор другого пользователя.
Итак, теперь я просто хочу получить такой вывод:
| Id | referral | referred_count |
|----|----------|----------------|
| 1 | 0 | 2 |
| 2 | 0 | 1 |
| 3 | 1 | 0 |
| 4 | 2 | 0 |
| 5 | 1 | 0 |
Есть ли способ получить этот вид вывода только с одним запросом mysql? Я пробовал много чего, но я застреваю.
Один простой метод использует коррелированный подзапрос:
select t.*,
(select count(*) from t t2 where t2.referral = t.id) as referred_count
from t;
Вы также можете сделать это с помощью 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