MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

时间:2022-09-15 22:59:14

表order1中的数据:
MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

汇总数据

1.聚集函数

聚集函数:运行在行组上,计算和返回单个值的函数。

SQL聚集函数

函数 说明
AVG() 返回某列的平均数
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和
SELECT AVG(order_price) AS avg_price
FROM order1;

返回表order1 中order_price一列的平均值

MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

2.聚集不同值

像最开始的表里一样,价格有许多重复的,如果只想把不同的值加起来求平均值该怎么办?这就用到了之前博客中提到的DISTINCT

SELECT AVGDISTINCT order_price) AS avg_price
FROM order1;

MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

3.组合聚集函数

SELECT语句可以根据需要包含多个聚集函数

SELECT COUNT(*)AS num,
MAX(order_price) AS max_price
AVG(order_price) AS avg_price
FROM order1;

MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

————————————————————————————————————————————————————————
————————————————————————————————————————————————————————

分组数据

为了讲解分组数据,先把表order1做一些变动:
MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

加入一列name

1.创建分组

  • GROUP BY
    假设要根据name统计供应商提供的产品
SELECT order_name,
COUNT(*)AS num
FROM order1
GROUP BY order_name;

group by按照order_name分组,即a为一组,b为一组,count的统计也不是对整张表进行操作,而是在每个分组内进行统计

MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

使用GROUP BY的规定
【1】GROUP BY子句可以包含任意数目的列。
【2】如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。
【3】GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果select中使用表达式,则GROUP BY子句中必须指定相同的表达式,不能使用别名。
【4】除聚集函数之外,select语句中的每个列都必须在GROUP BY子句中给出。
【5】如果分组中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,分为一个组。
【6】GROUP BY子句必须出现在where子句之后,order by子句之前。

2.过滤分组

group by可以分组数据,如果要过滤分组,即排除哪些分组,留下哪些分组,这个时候就不能使用where,因为where过滤的是行而不是分组。

  • HAVING

HAVING支持所有WHERE操作符,即它们句法相同,只是关键字有差别。

SELECT order_name,
COUNT(*)AS num
FROM order1
GROUP BY order_name;
HAVING COUNT(*)> 2;

HAVING对分组进行过滤,上面这个语句,过滤了分组之后num大于2的值

MySQL--操作简记(汇总数据(聚集函数),分组数据,子查询)

3.分组排序

使用order by 进行排序

————————————————————————————————————————————————————————-

子查询

子查询:嵌套在其他查询中的查询
将一条select语句返回的结果,用于另一条select语句的where子句

SELECT cust_id
FROM orders
WHERE order_num IN (SELECT order_num
FROM orderitems
WHERE prod_id = 'tnt2');

第二个SELECT 返回,从表orderitems中prod_id为tnt2的order_num,
将这个结果又传递给外部查询的where子句

——————————————————————————————————————————————————————————

SELECT字句顺序

把之前学的查询语句顺序进行整理,也是使用时必须遵循的次序

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组金酸聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数