2013-09-26 24 views
1

我想group by後算,而不是總線 只想按類別來算 group by後,我的結果是一樣在SQL組後數由

course  lecturer 
comp1111  Jim 
comp1100  Jim 
comp1100  Jim 
infs2321  Jess 
infs2321  Jess 
econ1222  Helen 

我的結果後數應

lecturer count 
Jim   3 
Jess   2 
Helen  1 

回答

3

我不明白你爲什麼想要一組由已分組之後。你只需要做一個小組即可得到你想要的結果。請看看這個sqlfiddle看它現場直播。

CREATE TABLE Table1 
    (`course` varchar(8), `lecturer` varchar(5)) 
; 

INSERT INTO Table1 
    (`course`, `lecturer`) 
VALUES 
    ('comp1111', 'Jim'), 
    ('comp1100', 'Jim'), 
    ('comp1100', 'Jim'), 
    ('infs2321', 'Jess'), 
    ('infs2321', 'Jess'), 
    ('econ1222', 'Helen') 
; 

select 
lecturer, count(*) 
from 
Table1 
group by lecturer desc; 

| LECTURER | COUNT(*) | 
-----------|----------|-- 
|  Jim |  3 | 
|  Jess |  2 | 
| Helen |  1 | 

編輯:

你不需要額外的表。要獲得最大數量的行,你可以簡單地做

select 
lecturer, count(*) 
from 
Table1 
group by lecturer 
order by count(*) desc 
limit 1; 

爲MySQL或

select top 1 
lecturer, count(*) 
from 
Table1 
group by lecturer 
order by count(*) desc; 

MS SQL Server的。在我的第一個答案我有GROUP BY lecturer DESC這是一樣的GROUP BY lecturer ORDER BY COUNT(*) DESC因爲在MySQL GROUP BY暗示的ORDER BY

如果這不是你想要的,要小心使用MAX()功能。當你只是做例如

select 
lecturer, max(whatever) 
from 
Table1 
group by lecturer; 

你不一定會得到任何最大的行。

你也可以做

select 
lecturer, max(whatever), min(whatever) 
from 
Table1 
group by lecturer; 

看到了嗎?您只需獲取函數返回的值,而不是屬於它的行。有關如何解決此問題的示例,請參閱manual entry

我希望我到現在也沒迷惑你,這是比你想知道的可能更多,因爲上面是特別適合團體。我認爲你真正想要做的只是按照你想要的方式排列表格,然後選擇一行,就像上面提到的那樣。

+0

Ooohh喔所以當我由講師團隊統計(*)時,是否由不同的講師自動統計? –

+0

是的,你得到每個不同的講師計數。 – fancyPants

+0

非常感謝你。如果我想得到最多的那一排,那就是'吉姆3'。我不能使用MAX(直接COUNT(*)。做我必須創建然後另一個表從表1獲得? –

0

試試這個。也許工作

SELECT LECTURER, COUNT(*) 
FROM 
(SELECT LECTURER, COURSE 
FROM TABLE 
WHERE 
GROUP BY LECTURER, COURSE) 
GROUP BY LECTURER; 
0

嘗試這個命令在MySQL

============================

select 
lecturer, count(*) 
from 
Course_detail 
group by lecturer desc;