Моя структура таблицы для рефералов такова, поле ref уникально:
ID pid ref ref_by
1 1 k NAN
2 2 l k
3 3 m k
4 4 n l
И пользовательская таблица:
id name
1 john
2 Bob
3 Tim
4 Rob
Мне нужно получить id, pid, ref и count ref в следующем столбце. На основании количества рефералов каждому из них будет назначено несколько баллов, равных 100, результат должен выглядеть следующим образом.
pid name ref number_of_referals points_earned
1 john k 2 200
2 Bob l 1 100
3 Tim m 0 0
4 Rob n 0 0
Вам нужно 2 соединения:
первый из таблицы users
для referrals
и второй для запроса, который группирует и считает рефералов:
select
r.id, u.name, r.ref,
isnull(c.counter, 0) number_of_referals,
isnull(c.counter, 0) * 100 points_earned
from
users u inner join referrals r on r.pid = u.id
left join (select ref_by, count(*) counter from referrals group by ref_by) c
on c.ref_by = r.ref
order by r.id
Посмотреть демо