2014-11-20 4 views
1

У меня есть таблица, которая выглядит следующим образомавтообъединение с графом на Mysql

ID  fname  lname  sponsor_id 
1  Joe  Smith   0 
2  John  Jones   1 
3  Sue  Wills   1 
4  Bob  Hass   3 

Я хочу, чтобы перечислить все лидеры, как это в порядке

ID fname  lname  number_sponsored 
1  Joe  Smith   2 
3  Sue  Wills   1 
2  John  Jones   0 
4  Bob   Hass   0 

убыванию Я не могу за жизнь мне выяснить это соединение. Кто-нибудь хочет взять удар?

+1

Стоп изменить свой оригинальный пост содержание; что по существу аннулирует уже указанный ответ. Отредактируйте сообщение и добавьте дополнительный контент, сохранив оригинальный контент. – Rahul

+0

К сожалению, у меня проблемы с этим редактором .... Я оставлю это в покое! –

ответ

0

Вы можете подсчитать количество спонсорскую в подзапросом

Select Id, fname, lname, 
(select count(sponser_id) from table1 a where a.sponser_id = b.id) as number_sponsored 
From table1 b 
Order by number_sponsored desc 
+0

Это потрясающе! Я предполагаю, что могу заказать по номеру_sponsored DESC правильно? –

+0

@Trey Dyer, да правильно – radar

+0

Спасибо Radar !!!! –

2

Я думаю, что единственный трюк в том, что вам нужен left join, чтобы получить строки с нулевым количеством. Вот один из способов написать запрос:

select t.id, t.fname, t.lname, count(t2.sponsor_id) as num_sponsored 
from table t left join 
    table t2 
    on t.id = t2.sponsor_id 
group by t.id, t.fname, t.lname; 

Альтернативный подход не использует явный join:

select t.*, (select count(*) from table t2 where t.id = t2.sponsor_id) as num_sponsored 
from table t; 

Это может быть более понятным для тех, кто немного смущен вопросом.

0
SELECT DISTINCT 
     id 
FROM 
    tbl t 
Left JOIN 
    (SELECT 
     number_sponsored, 
     COUNT(DISTINCT id) AS number_sponsored 
    FROM 
     tbl2 
    GROUP BY sponsor_id) AS number_sponsored 
    ON t.id = number_sponsored.id 
    Where t.sponsor_id >t2. number_sponsored 

или вы можете взглянуть на этих ресурсах

SELECT * FROM t1 
    ORDER BY key_part1,key_part2,... ; 

SELECT * FROM t1 
    WHERE key_part1 = constant 
    ORDER BY key_part2; 

SELECT * FROM t1 
    ORDER BY key_part1 DESC, key_part2 DESC; 

SELECT * FROM t1 
    WHERE key_part1 = 1 
    ORDER BY key_part1 DESC, key_part2 DESC; 

SELECT * FROM t1 
    WHERE key_part1 > constant 
    ORDER BY key_part1 ASC; 

SELECT * FROM t1 
    WHERE key_part1 < constant 
    ORDER BY key_part1 DESC; 

SELECT * FROM t1 
    WHERE key_part1 = constant1 AND key_part2 > constant2 
    ORDER BY key_part2; 

Ссылка: http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

Смежные вопросы