2013-04-02 31 views
8

Tôi có cấu trúc bảng này với dữ liệu:MySQL tính trong cùng một bảng bao gồm không đếm giá trị

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'); 

tôi cần phải đếm id_user_ref cho tất cả người dùng với truy vấn này:

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

này hoạt động nhưng vấn đề là tôi cần phải hiển thị tất cả các kết quả ngay cả khi kết quả đếm là 0.

Tôi đã thử một số phép nối trái với cùng một bảng nhưng không thành công.

Sản lượng nên là:

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

bạn muốn đếm có bao nhiêu người sử dụng mike mời? sau đó bạn sẽ chạy vào một bên trong tham gia từ bảng cho chính nó :-) – Najzero

+0

đầu ra mong muốn bạn muốn nhận được từ truy vấn này là gì? –

+0

tôi cần phải biết làm thế nào cho mỗi người có bao nhiêu người có id ref của họ bao gồm 0 –

Trả lời

12

Hãy thử điều này:

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

này sẽ cung cấp cho bạn:

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

hoàn hảo, cảm ơn bạn. –

+1

@DspMarian - Bạn được chào đón bất kỳ lúc nào :) –

+0

'ON t1.id = t2.id_user_ref' không có ý nghĩa gì đối với tôi. Những cột này không giống nhau !? – C4u

Các vấn đề liên quan