第六章 统计与分组

本文深入探讨了SQL中的统计函数、分组操作及其执行顺序,通过实例展示了如何使用COUNT、SUM、AVG、MAX、MIN等函数进行数据汇总与筛选,并详细说明了分组与having语句的应用场景。此外,还提供了SQL语句执行顺序的解析,帮助读者更好地理解与应用这些关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、统计函数

aql中的统计函数有count(*/列名/distinct 列名),sum(); avg();max();min();后面四种都是对数值列的统计,里面参数有默认的 all 及 去重复统计distinct

它们可以放在 select 和from之间;或者having 之后。

having是用来专门解决 统计函数不能放在where之后的,用于统计函数的结果的过滤。

不能放在where之后。

二、分组

分组用group by  列名1,列名2,先对列1分组,在对列2 分组。

放在where之后,having语句之前。

select  分组列1,group_concat(非分组的列名2)   from t_name where 条件 group by 分组列1。

这样可以输出分组,及每个组中包含的列2中的所有值,他们放在一个数据中

三、语句执行顺序

语句的执行顺序是:

from   (联接), where 条件,group  by  分组,select  投影列,having  统计结果过滤,order  by  排序,limit m,n 分页。aql语句的时候按照这样的顺序写。

 

列子:

CREATE TABLE t_e(
	id INT ,
	NAME CHAR
);
SELECT COUNT(NAME) FROM t_e;

DELETE FROM t_student WHERE s_classid=1;-- delete 与 from之间不能加列名,否则报错,只能整行删除
-- 要删除单列的值用update 表名 set列名=  where条件
SELECT studentid,classid,grade FROM enrollment WHERE grade<60 GROUP BY classid HAVING AVG(grade)<70 ORDER BY grade;

CREATE TABLE t_student(
	s_id INT PRIMARY KEY AUTO_INCREMENT,
	s_name VARCHAR(50) NOT NULL,
	s_score INT,
	s_sex CHAR(2) NOT NULL,
	s_classid INT NOT NULL
)CHARSET='utf8';

INSERT INTO t_student VALUE
	(NULL,'张曾',87,'男',1),
	(NULL,'张曾',87,'男',1),
	(NULL,'张2',76,'男',2),
	(NULL,'张4',87,'男',3),
	(NULL,'张3',34,'男',1),
	(NULL,'张曾',87,'男',4),
	(NULL,'张曾',87,'男',3),
	(NULL,'张曾',87,'男',3),
	(NULL,'张曾',98,'女',2),
	(NULL,'张曾',87,'男',2),
	(NULL,'张曾',96,'女',1);

SELECT MAX(s_score),s_classid FROM t_student GROUP BY s_classid ORDER BY MAX(s_score) DESC;
SELECT MAX(s_score),s_sex,s_classid FROM t_student WHERE s_sex='男' GROUP BY s_classid;
SELECT MAX(s_score),s_sex,s_classid FROM t_student WHERE s_sex='男' AND s_classid=2;
SELECT AVG(s_score),s_classid,s_sex FROM t_student WHERE s_classid=1 AND s_sex='女';
SELECT COUNT(*)AS 人数,s_classid FROM t_student WHERE s_classid=1;
SELECT COUNT(*)AS 人数,s_classid FROM t_student GROUP BY s_classid;
SELECT * FROM t_student;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值