1

我想在我的结果group by之后计算,而不是总行只想按类别计算group by

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

我计数后的结果应该是

lecturer    count
Jim          3
Jess         2
Helen        1
4

3 回答 3

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 服务器。在我的第一个答案中,我GROUP BY lecturer DESC的答案与GROUP BY lecturer ORDER BY COUNT(*) DESCMySQL 中GROUP BYORDER BY.

如果这不是您想要的,请小心使用MAX()函数。例如,当您简单地做

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

你不一定会得到保持最大值的行。

你也可以做

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

看?您只得到函数返回的值,而不是属于它的行。有关如何解决此问题的示例,请参阅此手册条目

我希望我现在没有让你感到困惑,这可能比你想知道的要多,因为上面是特别针对团体的。我认为您真正想要做的只是按照您想要的方式订购表格,然后只选择一行,如上所述。

于 2013-09-26T08:13:33.693 回答
0

在mysql中尝试这个命令

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

select
lecturer, count(*)
from
Course_detail
group by lecturer desc;
于 2013-09-26T08:25:31.417 回答
0

尝试这个。它可能有效

SELECT LECTURER, COUNT(*) 
FROM 
(SELECT LECTURER, COURSE
FROM TABLE
WHERE 
GROUP BY LECTURER, COURSE )
GROUP BY LECTURER;
于 2013-09-26T08:07:56.873 回答