Asked Oct 22nd, 9:24 AM 130 0 2
  • 130 0 2
0

Xin hướng dẫn sử dụng lệnh SELECT ...đếm kết quả từ một bảng khác.

Share
  • 130 0 2

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 ANSWERS


Answered Oct 22nd, 9:49 AM
Accepted
+3

Đâ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

Share
Phong Nguyen @haiquacau
Oct 22nd, 9:57 AM

Ý của mình muốn có kết quả trong 1 query.

0
| Reply
Share
Trần Xuân Thắng @tranxuanthang
Oct 22nd, 10:02 AM

@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ả.

0
| Reply
Share
Phong Nguyen @haiquacau
Oct 22nd, 10:11 AM

@tranxuanthang cảm ơn bạn rất nhiều

0
| Reply
Share
Answered Oct 22nd, 9:43 AM
+2

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;
Share