数据库命令详解——数据表的排序/聚合命令/分组

本文详细介绍了SQL查询的基础知识及高级技巧,包括排序、聚合函数、分组与限制查询结果等,适合初学者及进阶读者学习。

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

1. 排序子句 order by

使用order by子句,对查询结果进行排序,默认是升序

//语法
order by 指定排序的列 asc 升序、desc 降序
//举例
select * from order_table where user_id in (1,4) 
order by price; //升序排列

在这里插入图片描述

select * from order_table where user_id in (1,4) 
order by price desc;  //降序排列

在这里插入图片描述

说明:order by子句一般位于select语句的结尾

2. 常用聚合函数

2.1 DISTINCT 对某一列数据去重(包含Null)
//语法
SELECT DISTINCT 列名 FROM 表名  //显示此列不重复的数据
//举例
select distinct user_nick from user_info_table;

在这里插入图片描述

2.2 COUNT 统计总行数
类型说明
count(*)包括所有列,返回表中的总行数,在统计结果的时候,不会忽略列值为null的行数
count(1)包括所有列,1表示一个固定值,没有实际含义,在统计结果的时候,不会忽略列值为null的行数,和count(*)的区别是执行效率不同
count(列名)只包括列名指定列,返回指定列的行数,在统计结果的时候,不统计列值为null的行数
count(distinct 列名)返回指定列的不重复的行数,在统计结果的时候,会忽略列值为null的行数(不包括空字符串和0)

在这里插入图片描述

select count(distinct user_nick) 
from user_info_table; //返回指定列的不重复的行数,不统计列值为null的行数

在这里插入图片描述

  • count(*) count(1) count(列名)执行效率比较

(1)如果列是主键,count(主键列名)优于conut(1),如果列不是主键,则相反
(2) 如果表中存在主键,count(主键列名)效率最优
(3)如果表中只有一列,则count()效率最优
(4)如果表有多列,且不存在主键,则count(1)效率优于count(
)
备注:数据量特别大时才会体现出来

2.3 MAX/MIN最大值、最小值

Max/min函数返回满足where条件的一列的最大/最小值

SELECT MAX(列名) FROM 表名;  //最大值语法

select max(price) from order_table;  //举例

在这里插入图片描述

SELECT MIN(列名) FROM 表名;  //最小值语法

select min(price) from order_table;  //举例

在这里插入图片描述

2.4 AVG 平均值

AVG函数返回满足where条件的一列的平均值

SELECT AVG(列名) FROM 表名;  //平均值语法

select avg(price) from order_table;  //举例

在这里插入图片描述

2.5 SUM 求和

SUM函数返回满足where条件的一列求和

SELECT SUM(列名) FROM 表名; //求和语法

select sum(price) from order_table;  //举例

在这里插入图片描述

2.6 聚合函数使用方法

(1)结合where使用

select sum(price) from order_table where user_id=1; //结合where使用

在这里插入图片描述
(2)多个聚合函数同时使用

select sum(price),avg(price),max(price),min(price) 
from order_table where user_id=1;  //多个聚合函数同时使用

在这里插入图片描述
(3)结合count使用

select sum(price),avg(price),max(price),min(price),count(1) 
from order_table where user_id=1; //结合count使用

在这里插入图片描述

3. limit的用法(一般跟在最后面)

//语法
select * from 表名 limit m,n  //m是指从哪行开始,m从0取值,0表示第一行;n指从第m+1条开始,取n条

//举例
select * from 表名 limit 0,2;  //表示从第1行开始,显示2行结果
select * from order_table limit 2,3; //从第3行开始,显示3行数据

在这里插入图片描述

如果只给定一个参数,它表示返回最大的行数目:

select * from order_table limit 5;  //表示查询前5行

在这里插入图片描述

4. group by 分组(面试可能会问)

使用group by子句对列进行分组,还可使用having进行二次过滤,having通常跟在group by后面

(1)不分组时

select max(price) from order_table group by user_id; 
//正常不分组时,显示最大价格

在这里插入图片描述
(2)分组时

select max(price),user_id from order_table 
group by user_id; //按照user_id分组,显示最大价格(按照user_id分组,一人一组,显示每组最大价格)

在这里插入图片描述

使用user_id分组,前面user_id就不能单独出现,可以使用聚合运算,如果二者不相同,则会报错

select sum(price),user_id from order_table 
group by product_id; //此处按照product_id分组,前面user_id就不能单独出现,会报错

在这里插入图片描述

select sum(price),count(user_id),product_id from 
order_table group by product_id; //4个人买1001商品,总价19.96;4个人买1002商品,总价59.96

在这里插入图片描述

(3) 不加having

select filed,聚合函数 from 表名 where 子句 group by field; //不加having

(4) 加having

Select filed,聚合函数 from 表名 where 子句 
group by filed having 聚合函数 过滤条件;//加having进行二次过滤,filed表示列名,聚合函数指count/sum等

select sum(price),count(user_id),product_id from 
order_table group by product_id having count(user_id)>2;

在这里插入图片描述

  • 说明
    使用group by后只能展示分组的列名+聚合函数结果,因为其余列已经基于分组这一列合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晓晓白的软件测试进阶之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值