2013-09-16 6 views
0

У меня есть пользователи-таблица, которая, как (короткое замыкание):MySQL присоединиться к одной таблице

id (BIGINT) 
username (VARCHAR) 
recommendedByUserId (BIGINT) 

В recommendedByUserId идентификаторе рекомендателя хранится, который является users.id -value из рекомендателя.

Теперь мне нужно знать, сколько раз каждый users.id находится в users.recommendedByUserId и сортировать по ним по убыванию, так что пользователь с большинством рекомендаций находится поверх результата.

Я пробовал:

SELECT u.username, COUNT(r.id) FROM users u INNER JOIN users r ON u.id = r.recommendedByUserId 

, но это не работает.

ответ

3

Если id достаточно

SELECT recommendedByUserId, COUNT(*) as rec_cnt 
FROM users u 
group by recommendedByUserId 
order by rec_cnt desc 

Если вам также необходимо имя, то вы можете сделать

select u.username, x.rec_cnt 
from users u 
inner join 
(
    SELECT recommendedByUserId as id, COUNT(*) as rec_cnt 
    FROM users u 
    group by recommendedByUserId 
) x on x.id = u.id 
order by x.rec_cnt desc 
+1

+1, а также сделать заказ 'УНТ desc' и ответ завершено! :) – MrSimpleMind

+0

Отлично, спасибо! Я не понимаю, почему мой вопрос получил downvote, хотя ... –

+0

У меня есть расширенный вопрос по тому же вопросу здесь, любой вход @juergend? http://stackoverflow.com/questions/18826457/mysql-count-on-joined-table/18826496 –

1
SELECT recommendedByUserId, COUNT(*) as cnt 
FROM users us 
group by recommendedByUserId order by cnt desc; 
Смежные вопросы