Xin hướng dẫn sử dụng lệnh SELECT ...đếm kết quả từ một bảng khác.
Có 2 bảng:
table A:
tb_id ka_status
2 New
2 Used
3 Used
3 Repaired
5 Used
6 Repaired
7 Suppend
8 Used
9 Suppend
Table B:
tb_id av_name
2 Loca 1
3 Loca 2
4 Loca 3
5 Loca 4
6 Loca 5
7 Loca 6
8 Loca 8
Làm sao để lấy đếm được từ Table A có bao nhiêu tb_id
đưa vào cột total_id
và đếm Table A cột ka_status
để có kết quả như hình dưới ?
tb_id av_name total_id status count_status
2 Loca 1 2 New 1
3 Loca 2 2 Used 4
4 Loca 3 0 Repaired 2
5 Loca 4 1 Suppend 2
6 Loca 5 1
7 Loca 6 1
8 Loca 7 1
9 Loca 8 1
2 CÂU TRẢ LỜI
Đây là câu hỏi về sử dụng COUNT()
với GROUP BY
khá đơn giản. Bạn thử tham khảo 2 truy vấn sau nhé:
SELECT table_b.*, COUNT(table_a.tb_id) AS total_id
FROM table_b LEFT JOIN table_a ON table_b.tb_id = table_a.tb_id
GROUP BY table_b.tb_id, table_b.av_name
ORDER BY table_b.tb_id;
SELECT DISTINCT(ka_status), COUNT(tb_id) AS count_status
FROM table_a
GROUP BY ka_status
ORDER BY ka_status;
Bạn xem ví dụ qua fiddle dưới đây nhé: http://sqlfiddle.com/#!17/8837d9/10
Ý của mình muốn có kết quả trong 1 query.
@haiquacau tại sao bạn lại cần truy vấn 2 kết quả hoàn toàn khác nhau chỉ trong 1 query? 2 kết quả trên trả về vốn đã có cấu trúc khác nhau, và mình không thấy có trường hợp thực tiễn nào yêu cầu cái đó cả.
@tranxuanthang cảm ơn bạn rất nhiều
Theo mình nhìn thì có vẻ tb_id ở bảng A là khóa ngoại, còn tb_id ở bản B là khóa chính (bình thường sẽ là id), đúng không nhỉ?
Nếu thế thì đây sẽ là câu lệnh 1:
SELECT B.id as tb_id, B.av_name, count(B.id) as total_id from B inner JOIN A on A.tb_id = B.id group BY B.id;
Và đây là query số 2:
SELECT ka_status as status, count(ka_status) as count_status from A GROUP BY ka_status;