mysql 14.12_MySQL必知必会12-14 汇总 分组 子查询

本文介绍了如何在Python的pandas DataFrame中运用MySQL的AVG(), COUNT(), MAX(), MIN(), SUM()聚集函数,以及如何进行分组、排序和使用子查询。涵盖了数据聚合、分组操作中的HAVING与WHERE区别,以及如何利用子查询实现数据过滤和计算。
摘要由CSDN通过智能技术生成

12 汇总数据-用聚集类函数

用于诸如:表中的行数、表中行组的和、列中的最大值平均值等。

(python的dataframe 在输出此类结果时有优势)

MySQL 五个聚集函数(其它还有:标准偏差聚集函数等)

AVG()

COUNT()

MAX()

MIN()

SUM()

SELECT AVG(alltotal) FROM yc_tmp;

SELECT MAX(alltotal),MIN(alltotal) FROM yc_tmp

# 若只聚集不同的值,用distinct-- p ;

13 分组和排序

13.1 分组 Group by

可以跟多个变量,相当于嵌套分组;

除聚集计算语句外,select的每列均需在group by 子句中给出。

Null 值会单独分为一组;

顺序:group by 必需在where子句之后,order by 子句之前

SELECT province,Max(alltotal) as max_total

,AVG(alltotal) as avg_total FROM yc_tmp

group by province;

13.2 过滤分组 having

having过滤分组,而where只过滤行。

二者用法相同,功能也类似。having可以替代where的功能

SELECT province,Max(alltotal) as max_total

,AVG(alltotal) as avg_total FROM yc_tmp

group by province

having avg_total >1000;

也会有同时使用的情形。

另外:用where是先过滤,再分组计算,having是分组计算后再过滤

SELECT province,Max(alltotal) as max_total

,AVG(alltotal) as avg_total FROM yc_tmp

where province not in ('陕西','湖北')

group by province

having avg_total >1000

order by avg_total;

44514cc8946d50c80ae5a66debf28db6.png

未排序结果

13.3 排序 order by

group by 出来的结果有时看起来是按分组排序的,但SQL并无此机制,故:若需要排序结果,必需用order by 指明。

c79be55216ea0c1f5cbe4f910ca72821.png

排序结果

语句顺序:

Select

from

where

group by

having

order by

limit

14 子查询

子查询可用来:

实现过滤,A表中的数据符合B表某些条件时显示;

提供计算字段。

实现过滤的用法

一般顺序:先从B表中查询到需要的数据

再把该数据结果,放在下一个查询语句中使用。

子查询可以将这两个过程嵌套起来。

Select cust_id

from orders

Where order_num in ( select order_num

from orderitems

Where prod_id = 'TNT2') ;

子查询可以多级嵌套,在使用时建议使用多行,并且适当缩进

注意效率,比对项较多时,速度会慢……

实现字段计算

即正常查询语句中的某一字段,是从其它表中查询过来的。

select cust_name,

(select count(*)

from orders

Where orders.cust_id = customers.cust_id ) as orders

from customers

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值