• 第四题:Classes More Than 5 Students


    https://leetcode.com/problems/classes-more-than-5-students/description/

    +---------+------------+
    | student | class      |
    +---------+------------+
    | A       | Math       |
    | B       | English    |
    | C       | Math       |
    | D       | Biology    |
    | E       | Math       |
    | F       | Computer   |
    | G       | Math       |
    | H       | Math       |
    | I       | Math       |
    +---------+------------+

    查找有五名及以上 student 的 class。

    +---------+
    | class   |
    +---------+
    | Math    |
    +---------+

    这里学习一下聚合函数,GROUP BY 和 HAVING 的使用

    GROUP BY语句从英文的字面意义上理解就是“根据(BY)一定的规则进行分组(GROUP)”。
    它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
    注意:GROUP BY 是先排序后分组;

    GROUP BY 和HAVING  的组合:前提必须了解sql语言中一种特殊的函数:聚合函数,
    例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 
    WHERE关键字在使用集合函数时不能使用,所以在集合函数中加上了HAVING来起到测试查询结果是否符合条件的作用。

    需要注意说明:当同时含有WHERE子句、GROUP BY 子句 、HAVING子句及聚集函数时,执行顺序如下:

    • 执行WHERE子句查找符合条件的数据;
    • 使用GROUP BY 子句对数据进行分组;对GROUP BY 子句形成的组运行聚集函数计算每一组的值;最后用HAVING子句去掉不符合条件的组;
    • HAVING子句中的每一个元素也必须出现在SELECT列表中。有些数据库例外,如oracle;
    • HAVING子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制;
    • HAVING子句限制的是组,而不是行。WHERE子句中不能使用聚集函数,而HAVING子句中可以。

    对于本题来说,考虑用聚合函数COUNT 来统计calss大于等于5的课程数,于是应该首先考虑将class分组(GROUP BY),在组内进行数量统计(HAVING COUNT),对于数量大于等于5的情况则SELECT出来,同时还要考虑同组内的student重复的情况,此时应该只计数一次(DISTINCT)。

    SELECT class
    FROM courses
    GROUP BY class
    HAVING COUNT(DISTINCT student) >= 5;
  • 相关阅读:
    分享50个漂亮的设计师个人作品集网站案例
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    ajax异步请求
    angularJS(6)
    angularJS(5)
    PHP实现RTX发送消息提醒
    ajax异步请求
    angularJS(4)
    angularJS(3)
    jsPanel插件Option总结
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10429752.html
Copyright © 2020-2023  润新知