2016-12-19 22 views
0

加入語句重複我有兩個表刪除在MySQL和組

表1

 
Name marks 
John 50 
Smith 70 
Adam 60 
Roy  70 

表2

 
Score Grade other 
50  C  1.5 
60  B  0.7 
70  A  0.8 
70  A  1.0 

我想有多少人得到了一個,B,C通過 我想得到一個輸出爲

 
Grade Count 
C  1 
B  1 
A  2 

查詢我想是

SELECT table2.Grade, 
     COUNT(DISTINCT table2.Grade) as count 
FROM table1 
LEFT JOIN table2 
     ON table1.Mark = table2.Score 
GROUP BY table2.Grade; 

但它給

 
Grade Count 
C  1 
B  1 
A  4 

所以如何刪除重複? 請幫忙。

+0

你是什麼原因加入table2與table1? – Wanderer

+0

獲得相關成績以獲得他所獲得的分數 –

+0

爲什麼反正有'A'兩個條目? – e4c5

回答

0

在你的第二個表,你有重複行:

Score Grade other 
50  C  1.5 
60  B  0.7 
70  A  0.8 
70  A  1.0 

在這裏,有到A的,當你與第一joing根據現場表「級 - 分數」,整個連接是:

Jhon 50 C 
Smith 70 A 
Smith 70 A --> Second A from second table 
Adam 60 B 
Roy 70 A 
Roy 70 A --> Second A from second table 

所以GROUP BY和計數將導致4這裏校級:

A 4 --> 2 Smith and 2 Roy 
B 1 
C 1 

所以,每級獲得多少單身人士:

select tb2.Grade GradeMark, count(*) TotalPersons 
from table1 as tb1 
left join (select tbi2.Score, distinct(tbi2.Grade), tbi2.other, from table2 tbi2) as tb2 on tb2.Grade = tb1.marks 
group by tb2.Grade 

這個查詢從表2可以選擇不同的值,與表中的一個連接和計算每個年級的結果,所以你應該得到:

A 2 
B 1 
C 1 
+0

這就是問題假設有一些其他參數表2。 –

+0

你說:「我想知道有多少人有A,B,C通行證我想得到一個輸出爲」所以在這裏,A的總數是4,你真正的問題在這裏是什麼? – webmaster

+0

只有史密斯和羅伊得到了A s所以它的2. –

0

對此,您不需要JOIN。您可以嘗試像下面用一個簡單的group by並獲得count()

select Grade, count(*) as `Count` 
from table2 
group by Grade; 
+0

我認爲您誤解了這個問題。我想知道有多少人獲得了A,B,C通行證我已經編輯了這個問題,很抱歉給您帶來不便。 –

+0

你想要多少人獲得成績然後從名稱中選擇姓名,年級,總數從b1內部加入b2到分數組中# – denny