2014-03-19 21 views
1

我確實試圖通過使用Google搜索來獲得答案,但我找不到解決方案。在mysql中顯示計數值和多行

其實我有兩張桌子。

這是假設學生表

id | sname | cid 
1  a  1 
2  b  2 
3  c  2 
4  d  3 
5  e  4 
6  f  3 
7  g  4 
8  h  3 

這是類表

id | sname 
1  c1  
2  c2  
3  c3  
4  c4  

我想要的結果如下圖所示:

Result: 

id | cname | sname | count 
1  c1  a  1 
2  c2  b  2 
3  c2  c  2 
4  c3  d  3 
1  c4  e  2 
2  c3  f  3 
3  c4  g  2 
4  c3  h  3 

正如你所看到的結果將是像上面所有的學生名字將與類名稱& count會是這樣的。

我該怎麼做?

+2

什麼是'id'和'count'是什麼?計數什麼? – CodeBird

回答

1

試試這個:

SELECT * FROM 
((SELECT C.id,C.sname as cname,S.sname as sname 
FROM class C INNER JOIN students S on C.id=S.cid) T1 
LEFT JOIN 
(Select C.id,count(S.cid) as count 
FROM class C INNER JOIN students S on C.id=S.cid 
GROUP BY C.id) T2 on T2.id=T1.id) 
ORDER BY sname 

結果:

ID CNAME SNAME COUNT 
1 c1  a  1 
2 c2  b  2 
2 c2  c  2 
3 c3  d  3 
4 c4  e  2 
3 c3  f  3 
4 c4  g  2 
3 c3  h  3 

參見導致SQL Fiddle

說明:內部查詢的

第一部分選擇ID,CNAME和SNAME。第二部分選擇計數。在外部查詢中,我們只是加入它們。

+0

它的工作...很多謝謝..但是因爲我的聲望低於15我不能投票你的答案...對不起,但...仍然很多很多謝謝保存我的一天... – tanim

0

聯接與數子查詢應該這樣做:

SELECT 
    s.id `id`, 
    c.sname `cname`, 
    s.sname `sname`, 
    (SELECT COUNT(1) FROM students WHERE students.cid = c.id) `count` 
FROM 
    students s 
    LEFT JOIN class c ON s.cid = s.id 
+1

查詢無法正常工作,因爲它只顯示計數爲1。我需要計算學生表上的班級ID。 – tanim

+0

對不起,從錯誤的表中選擇,更新。 –

0
SELECT S.ID AS ID , C.SNAME AS CNAME , S.SNAME AS SNAME , CNT.COUNT AS COUNT 
FROM STUDENTS S , CLASS C , (
           SELECT S.CID AS CID , COUNT(*) AS COUNT 
           FROM STUDENTS S 
           GROUP BY S.CID 
           ) AS CNT 

WHERE S.CID = C.ID AND CNT.CID = C.ID