• SQL聚合


    sql聚合的规定:

    对表进行聚合查询时,只能在SELECT子句中写下面3种内容:

    1.通过GROUP BY子句指定的聚合键

    2.聚合函数

    3.常量

    谓词

    日常写SQL语句中,我们会用到"< > ="比较谓词,BETWEEN、LIKE、IN、IS NULL,那么这些谓词背后的原理是什么?

    谓词其实是一个特殊的“函数”,返回值为True 或者 FALSE 或者 UNKNOWN,我们在where子句中加入谓词,来返回 值为真 的行。

    为什么一定要按照这个规定做?

    一个例子

    有这么一个表格: 字段为member,team,age

    下面是正确和错误的做法

    SELECT team, AVG(age) FROM Teams GROUP BY team √

    SELECT team, AVG(age), member FROM Teams GROUP BY team   ×

    第一种做法是按队伍分组,求每个队伍的平均年龄,这种做法是正确的。

    而第二种做法在SELECT语句中多加member列,这种方式是错的,原因是,数据库中的表此时存的是每个人的member,无法求出每个team的member。

    使用group by聚合后,sql的操作对象由原来的“行”变为“行的集合”。

    虽然没法求出每个team的member是什么?但sql可以求出每个team的最大member是什么?

    SELECT team, AVG(age), MAX(member) FROM Teams GROUP BY team   

    练习:求出小组中年龄最大的成员的“组名”,“年龄”,“姓名”

    正确的做法是

    SELECT team, MAX(age), (SELECT MAX(member) FROM Teams T2 WHERE T2.team = T1.team AND T2.age = MAX(T1.age)) AS oldest FROM Teams T1 GROUP BY team;

  • 相关阅读:
    STS 创建 Maven 项目填坑
    JeeSite | 访问控制权限
    《Spring + MyBatis 企业应用实战》书评
    MyBatis-Generator 用法介绍
    Java描述数据结构之链表的增删改查
    Java中的Object类的几个方法
    设计模式之策略模式(Strategy Pattern)
    设计模式之模板方法(Template Method)
    JeeSite | 数据分页与翻页
    day 19
  • 原文地址:https://www.cnblogs.com/liuguangshou123/p/14370204.html
Copyright © 2020-2023  润新知