zoukankan      html  css  js  c++  java
  • LeetCode刷题(数据库)---- 超过5名学生的课

    题:请列出所有超过或等于5名学生的课。

    有一个courses 表 ,有: student (学生) 和 class (课程)。

    例如,表:

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

    应该输出:

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

    Note:
    学生在每个课中不应被重复计算。

    分析:

    1、使用count()合计

    2、需要按课程分组Grout By

    3、条件过滤Having

    4、重复选同一门课程的学生不累计

    COUNT用法:

    COUNT(expr) 
    返回SELECT语句检索到的行中非NULL值的数目。   
    若找不到匹配的行,则COUNT() 返回 0 。 

    GROUP BY用法:

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name

    结合合计函数:COUNT
    SUMAVGMAX,MIN 

    Having用法:

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    HAVING aggregate_function(column_name) operator value

    1、一个HAVING子句。
    2、HAVING子句基本上是最后使用,只位于被发送给客户端的条目之前,没有进行优化。(必须位于GROUP BY子句之后,ORDER BY子句之前,LIMIT用于HAVING之后。)
    3、HAVING不能用于应被用于WHERE子句的条目
    4、HAVING子句可以引用总计函数,而WHERE子句不能引用

    解答:

    SELECT class 
    FROM courses 
    GROUP BY class
    HAVING count(distinct student)>=5;
  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/zqunor/p/8635599.html
Copyright © 2011-2022 走看看