2017-09-04 59 views
0

我有包含以下數據MySQL表如下:如何確保特定列組只計算一次BY

MariaDB [testdb]> select * from courses; 
+---------+---------+ 
| student | class | 
+---------+---------+ 
| A  | Math | 
| B  | English | 
| C  | Math | 
| D  | Biology | 
| E  | Math | 
| F  | Math | 
| A  | Math | 
+---------+---------+ 
7 rows in set (0.00 sec) 

現在我有,我希望看到的計數的簡單情況的人蔘加特定班級。所以我用這個查詢,讓我有如下結果:

MariaDB [testdb]> select class, count(class) from courses group by class; 
+---------+--------------+ 
| class | count(class) | 
+---------+--------------+ 
| Biology |   1 | 
| English |   1 | 
| Math |   5 | 
+---------+--------------+ 
3 rows in set (0.01 sec) 

但這裏的前提條件是,它與學生=「A」計數的行類=「數學」的兩倍。

當我們進行點數計算時,我必須確保每個學生只被計入一次。

我如何修改上述查詢來實現這一目標?

在此先感謝您的任何答案。

+1

見COUNT(DISTINCT ...),但你真的需要這裏PRIMARY KEY。並且要小心你正在計算的內容以及你正在分組的內容。 – Strawberry

+0

閱讀['COUNT()'](https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_count)函數。它接受'DISTINCT'修飾符。 – axiac

+0

我明白你的意思了,但我不禁想到或許問題出在數據本身。爲什麼學生A要被列出兩次?這不是一個錯誤?如果不是,爲什麼不計算兩次?有些東西不適合這裏。 – Neil

回答

0

嘗試此查詢

SELECT temp.class,count(temp.class) FROM(
select student,class from courses group by student 
) AS temp 
GROUP BY `class`; 
0

您可以使用DISTINCT,例如:

SELECT class, COUNT(DISTINCT(student)) 
FROM courses 
GROUP BY class; 

這應該給你去deuped計數。

或者,您也可以通過班級和學生組,讓每類計算每個學生例如爲:

SELECT class, student, COUNT(*) 
FROM courses 
GROUP BY class, student;