2013-04-02 2 views
8

У меня есть эта таблица структура с данными:MySQL подсчитывать в том же таблице, включая нулевое значение счетчика

INSERT INTO `test` (`id`, `email`, `id_user_ref`, `name`) VALUES 
(1, '[email protected]', NULL, 'Mike'), 
(2, '[email protected]', '1', 'Jhonny'), 
(3, '[email protected]', '1', 'Michael'), 
(4, '[email protected]', '2', 'Jorhe'), 
(5, '[email protected]', '3', 'Mia'); 

Мне нужно подсчитать id_user_ref для всех пользователей с этим запросом:

SELECT id, COUNT(name) AS refNr FROM test GROUP BY id_user_ref 
HAVING id_user_ref IS NOT NULL; 

Это работает, но проблема в том, что мне нужно отображать все результаты, даже если результат подсчета равен 0.

Я пробовал несколько левых объединений с одной и той же таблицей, но без каких-либо успехов.

Вывод должен быть:

id refNr 
1 2 
2 1 
3 1 
4 0 
5 0 
+0

вы хотите посчитать, сколько пользователей Майк пригласил? то вы столкнетесь с внутренним соединением от таблицы к себе :-) – Najzero

+0

Какой желаемый результат вы хотите получить из этого запроса? –

+0

Мне нужно знать, как для каждого человека, сколько людей имеют свой идентификатор, включая 0 –

ответ

12

Попробуйте это:

SELECT 
    t1.id, 
    IFNULL(COUNT(t2.name), 0) AS refNr 
FROM test AS t1 
LEFT JOIN test AS t2 ON t1.id = t2.id_user_ref 
GROUP BY t1.id; 

SQL Fiddle DEmo

Это даст вам:

| ID | REFNR | 
-------------- 
| 1 |  2 | 
| 2 |  1 | 
| 3 |  1 | 
| 4 |  0 | 
| 5 |  0 | 
+0

безупречный, спасибо. –

+1

@DspMarian - приветствую любое время :) –

+0

'ON t1.id = t2.id_user_ref' не имеет для меня никакого смысла. Эти столбцы одинаковы !? – C4u

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