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

本文详细介绍了MySQL中操作数据的关键概念,包括如何使用聚集函数如AVG来计算平均值,结合DISTINCT获取不同值的统计,以及如何组合多个聚集函数。在分组数据部分,通过GROUP BY子句实现按列分组,并利用HAVING过滤特定分组,同时讲解了分组后的排序。此外,文章还探讨了子查询的运用,将一个查询的结果作为另一个查询的条件。最后,总结了SELECT字句的执行顺序。

表order1中的数据:
这里写图片描述

汇总数据

1.聚集函数

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

SQL聚集函数

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

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

这里写图片描述

2.聚集不同值

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

SELECT AVGDISTINCT order_price) AS avg_price
FROM order1;

这里写图片描述

3.组合聚集函数

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

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

这里写图片描述

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

分组数据

为了讲解分组数据,先把表order1做一些变动:
这里写图片描述

加入一列name

1.创建分组

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

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

这里写图片描述

使用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的值

这里写图片描述

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要检索的行数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值