SQL——聚合与排序

SQL——聚合与排序

  1. 对表进行聚合查询

what:
聚合,将多行汇总成一行,输入多行输出一行;用于汇总的函数,称为聚合函数
输入值称为参数papameter,输出值称为返回值
如:

COUNT:计算表中记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中数值列中数据的最大值
MIX:求出表中数值列中数据的最小值

COUNT:

SELECT COUNT(*) FROM 表名;//计算表中全部数据的行数,会得到包含空行NULL的总行数
//注意其他函数不能将*作为输入参数,仅COUNT可以
SELECT COUNT(列名) FROM 表名;//想要得到指定列的非空行数

SUM:只适用于数值类型的列

SELECT SUM(列名) FROM 表名;//计算时会把NULL自动排除在外

AVG:只适用于数值类型的列

SELECT AVG(列名) FROM 表名;//计算时会事先删除NULL,因此分母不会包含

MAX,MIN:几乎适用于所有数据类型的列,如,日期,字符串

SELECT MAX(列名) ,MIN(列名)FROM 表名;

DISTINCT:对聚合函数删除重复行

SELECT COUNT(DISTINCT 列名) FROM 表名;
//此时DISTINCT必须写在括号中,因为要在计算之前先删除重复行
//如果写在括号外,会先计算,再去删除重复行
  1. 对表进行分组GROUP BY
    先分组再分组进行汇总处理,
    GROUP BY子句只能写在SELECT子句之中,要在FROM之后,有WHERE则在WHERE之后
    SELECT→FROM→WHERE→GROUP BY:
    执行顺序,先FROM选中数据表,再进行WHERE条件筛选,筛选结束再进行GROUP BY分组,最后用SELECT语句进行指定的提取显示呈现
SELECT 列名1,列名2......
FROM 表名
GROUP BY 列名1,列名2......//在GROUP BY子句中指定的列称为聚合键或分组列,决定表的切分方式

当指定列中包含NULL时,会将NULL作为一组特定数据进行划分分组

注:
SELECT中的列名,而GROUP BY没有,则会发生错误
GROUP BY指定列不能用别名
GRUOP BY不能使用聚合函数,如

WHERE COUNT(*)=2
//这样的写法会发生错误,
//只有SELECT子句和HAVING子句,以及ODER BY子句中能使用聚合函数
  1. 为聚合结果指定条件
    HAVING子句:
    对表中数据进行汇总操作,得到分组结果后通过指定条件来选取特定组
SELECT 列名1,列名2......
FROM 表名
GROUP BY 列名1,列名2......
HAVING 分组结果对应的条件(常数,聚合函数,GROUP BY指定的列名)
//必须在GROUP BY语句之后,因为HAVING的执行顺序是比GROUP BY靠后

注:WHERE与HAVING
WHERE,指定行对应的条件,处理速度更快
排序前先过滤,减少了需要排序的数据量
HAVING,指定组对应的条件
排序后才对数据进行分组

  1. 对查询结果进行排序
    SELECT出的结果是随机排序的,
    需要通过在SELECT语句末尾添加ORDER BY子句来明确指定排列顺序:
SELECT 列名1,列名2......
FROM 表名
ORDER BY 排序基准1,排序基准2 ASC/DESC......//此时在这里书写的列名为排序键
//省略ORDER BY 后面的关键字时会默认使用升序排列
  • 多个排序键:
    ASC DESC都是以列为单位指定的,因此可以同时指定一个列升序,其他列降序
    也可以指定多个排序键,规则是优先使用左边的键,如果该列存在相同值,再接着参考右侧的键进行排序。

  • NULL的排序:
    不能对NULL使用比较运算符,因此,含有NULL的列作为排序键时,NULL会在结果的开头或末尾汇总显示。

  • 使用别名:
    ORDER BY允许使用别名

  • 执行顺序:
    FROM→WHERE→GROUOP BY→HAVING→SELECT→ORDER BY

  • 可以用的排序键:
    存在于表中,但没有进行SELECT的列,以及聚合函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值