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;
  • 相关阅读:
    mybatis动态sql和分页
    mybatis入门
    IDEA
    Linux环境搭建
    svn
    jwt
    Vuex
    SPA项目开发之CRUD+表单验证
    JavaScript可视化框架——Echarts
    python+selenium六:隐式等待
  • 原文地址:https://www.cnblogs.com/zqunor/p/8635599.html
Copyright © 2011-2022 走看看