sql学习记录8-聚合函数COUNT/SUM/AVG/MAX/MMIN,GROUP BY,HAVING先过滤后聚合、先聚合后过滤、书写顺序、执行顺序

本文详细介绍了SQL中的聚合函数,包括COUNT、SUM、AVG、MAX、MIN的用法,并通过Navicat实操展示了分组查询。讲解了GROUP BY和HAVING子句的区别,强调了SQL语句的书写和执行顺序。
摘要由CSDN通过智能技术生成

单表查询----聚合函数

在这里插入图片描述

  1. 普通函数输入是一列,输出也是一列,输出列中的行与输出列的行,作用于列的每一个单元格,聚合函数以列输入,但是输出结果列只有一行。

  2. 聚合函数是汇总处理数据,不是像SELECT一样的检索数据。比如求和、求平均值。

聚合函数–参数是列名

(1)计数函数 COUNT(列名)

COUNT(*) 确定表中行的数目
COUNT(1) 确定表中第一列的行的数目。如果表中没有NULL,那么任何一列的行数目是一样的

COUNT(col) 确定col这一列有多少行,只作用非NULL行,但是不可以计数多列,即参数只能是一个列名

COUNT(DISTINCT col) 对行去重计数

注:

  • COUNT是唯一可以用*的聚合函数。
  • COUNT(*)
    (col表示列,column)
  • COUNT忽略NULL,比如实际有8行,其中一行是NULL,那么COUNT的结果是7.
  • 尽量不要再一个语句中写多个COUNT,比如尽量不要这样写
SELECT 
COUNT(m.prod_name)
,COUNT(m.saleprice) 
FROM milk_tea AS m;

说是会出现问题??还没试出什么问题。。。

(2)求和函数 SUM

指定列的和:SUM(col)

具体用法:

  • 区别于直接四则运算;因为四则运算是不能做有空值的运算,如果有空值,那么四则运算的结果就是空值,而SUM求和是直接跳过空值,如果有空值,就忽略空值,计算其他所有非空值的和。
  • 只对数值型作用;
  • 可以同时操作多个列;
  • 可以作用于计算表达式,指的是参数可以是列名,参数也可以是列名之间的计算

(3)均值函数 AVG

指定列的平均值:AVG(col)
具体用法:

  • 分母不对NULL计数,即空值被过滤掉,即列的SUM值/列的COUNT值(分子也不对NULL行计数)
  • 可以同时操作多个列

(4)最大值函数 MAX

指定列的最大值:MAX(col)

具体用法:

  • 适用于数值型、文本型、日期型,其中文本型也是可以比较最大值最小值的,只是用的比较少

  • 要求该列可以排序,文本数据排序考虑的是编码的问题

  • 忽略NULL,因为NULL没法比较大小

  • DISTINCT无意义, DISTINCT指的是去重,但是不论去重不去重,最大值依然是最大值,所以结果是一样的。

(5)最小值函数 MIN

指定列的最小值:MIN(col)
具体用法:

  • 适用于数值型、文本型、日期型,其中文本型也是可以比较最大值最小值的,只是用的比较少

  • 要求该列可以排序,文本数据排序考虑的是编码的问题

  • 忽略NULL,因为NULL没法比较大小

  • DISTINCT无意义, DISTINCT指的是去重,但是最大值依然是最大值,所以结果是一样的。

Navicat实操

1. count

SELECT 
COUNT(*) #这个表格的行数
, COUNT(1) #第一列的行数
, COUNT(3) #第三列的行数
FROM milk_tea AS m;

在这里插入图片描述

SELECT 
COUNT(m.pro_date)  #pro_date列的行数
, COUNT(m.prod_name) #prod_name列的行数
FROM milk_tea AS m;
#m.pro_date有一个空值
#最好不要一个语句中写两个COUNT函数

在这里插入图片描述

SELECT 
COUNT(m.net_w) 
, COUNT(DISTINCT m.net_w) #先对net_w列去重,再计数该列的行数
FROM milk_tea AS m; 
#DISTINCT去重计数
#最好不要一个语句中写两个COUNT函数,可能会出错

在这里插入图片描述

SELECT DISTINCT m.sale_price FROM milk_tea AS m ;
# DISTINCT作用于所有列。去重
SELECT COUNT(DISTINCT m.sale_price) FROM milk_tea AS m; 
# sale_price中 8行,有一行是NULL,DISTINCT去重之后NU
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值