从GROUP BY子句获得分钟

时间:2016-05-01 14:46:15

标签: sql

我有下表course

course(idcourse, title, description, price, date, instructor)

而且我想让教练用更少的课程。到目前为止,我可以为每位教师提供他教授的课程数量

SELECT instructor, count(*)
FROM courses
GROUP BY instructor;

我的示例中此查询的结果是这一个:

INSTRUCTOR COUNT(*)
1          5
2          2
7          5

现在我需要让教练用更少的课程。这个特例是2

我已尝试使用HAVING count(*) = min(*),但它会出现语法错误。

我该怎么办?我应该尝试不同的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用FETCH FIRST 1 ROWS ONLYSQL:2008 standard):

SELECT instructor, count(*)
FROM courses
GROUP BY instructor
ORDER BY 2 
FETCH FIRST 1 ROWS ONLY

某些数据库尚不支持此语法,但使用其他语法LIMIT 1。其他一些人支持TOP 1,如下所示:

SELECT TOP 1 instructor, count(*)
FROM courses
GROUP BY instructor
ORDER BY 2 

请参阅前面引用的wikipedia article中的更多替代语法的广泛列表。

注意:ORDER BY 2子句将按第二列(升序)对结果进行排序,之后FETCH FIRST(或替代)子句将结果简化为第一个记录。

答案 1 :(得分:1)

您可以像这样使用having(至少使用Oracle):

    SELECT instructor, count(*) cnt
    FROM courses
    GROUP BY instructor
    HAVING count(*) = (select min(count(*)) from courses group by instructor)