MySQL之数据查询(分类汇总与排序)

本文详细介绍了SQL中的GROUPBY子句,用于根据字段对数据进行分组,常与聚合函数配合使用;HAVING子句则在GROUPBY后过滤满足条件的分组;ORDERBY子句用于结果集的排序,可指定升序或降序;LIMIT子句则限制查询返回的行数,支持偏移量设置。通过这些子句,可以更高效地处理和分析数据库中的数据。
摘要由CSDN通过智能技术生成

1、GROUP BY子句

        GROUP BY子句主要用于根据字段对行分组。例如,根据学生所学的专业对学生基本表中的所有行分组,结果是每个专业的学生成为一组。

语法格式:GROUP BY[ 列名 ] [ ASC | DESC ],...[ WITH ROLLUP ]

 GROUP BY可以根据一个或多个列进行分组,也可以根据表达式进行分组,经常和聚合函数一起使用。

例:输出Book表中图书类别名

SELECT 图书类别
FROM Book
GROUP BY 图书类别;

 例:按图书类别统计Book表中各类图书的库存数

SELECT 图书类别,COUNT(*)AS '库存数'
FROM Book
GROUP BY 图书类别;

 使用带ROLLUP操作符的GROUP BY子句,指定在结果集内不包含由GROUP BY提供的正常行,还包括汇总行。

例:按图书类别、出版社分类统计Book表中各类图书的库存数,并进行分类小计

SELECT 图书类别,出版社,Sum(数量)AS '库存数'
FROM Book
GROUP BY 图书类别,出版社
WITH ROLLUP;

 2、HAVING子句

        使用HAVING子句的目的与WHERE子句类似,不同的是WHERE子句是用来在FROM子句之后选择行,而HAVING子句用来在GROUP BY子句后选择行。

        语法格式:HAVING 条件

        SQL标准要求HAVING必须引用GROUP BY子句中的列或用于聚合函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING引用SELECT清单中的列和外部子查询中的列。

例:查找Sell表中每个会员平均订购册数在10本以上的会员的身份证号和平均订购册数。 

SELECT 身份证号,AVG(订购册数)AS '平均订购册数'
FROM Sell
GROUP BY 身份证号
HAVING AVG(订购册数)>10;

 3、ORDER BY子句

        在一条SELECT语句中,若不使用ORDER BY子句,结果中的行的顺序是不可预料的。使用ORDER BY子句后可以保证结果中的行按一定顺序排列。

语法格式:ORDER BY{列名 | 表达式 | 列编号}[ ASC | DESC ],...

        关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC

例:将Book表中记录按出版时间先后排序 

SELECT *
FROM Book
ORDER BY 出版时间;

 例:将Sell表中记录按订购册数从高到底排列

SELECT *
FROM Sell
ORDER BY 订购册数 DESC;

 4、LIMIT子句

        LIMIT子句是SELECT语句的最后一个子句,主要用于限制被SELECT语句返回的行数

语法格式:LIMIT{ [ 偏移量,]行数 | 行数OFFSET 偏移量}

例如,LIMIT 5表示返回SELECT语句的结果集中最前面5行,而LIMIT 3,5则表示从第4行开始返回5行。

例:查找Members表中注册时间最靠前的5位会员的信息 

SELECT * FROM Members
ORDER BY 注册时间
LIMIT 5;

 当初始化不是从头开始时,要使用两个参数LIMIT偏移量,行数,值得注意的是初始行的偏移量为0而不是1。

例:查找Book表中从第4条记录开始的5条记录

SELECT *
FROM Book
ORDER BY 学号
LIMIT 3,5;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遇安.YuAn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值