MySQL排序分组限制:零基础速成语法(零基础入门版)

一、ORDER BY(排序):让数据排好队

bash 复制代码
最简单格式
sql
SELECT * FROM 表名 
ORDER BY 列名 [升序或降序];

1. 升序(从小到大)

bash 复制代码
sql
-- 按成绩从小到大排
SELECT * FROM students ORDER BY score;
-- 或者明确写ASC(可以省略)
SELECT * FROM students ORDER BY score ASC;

2. 降序(从大到小)

bash 复制代码
sql
-- 按成绩从大到小排
SELECT * FROM students ORDER BY score DESC;

3. 多个排序条件

bash 复制代码
sql
-- 先按班级排,再按成绩降序排
SELECT * FROM students 
ORDER BY class, score DESC;
示例表
sql
-- 创建简单示例表
CREATE TABLE students (
    id INT,
    name VARCHAR(20),
    class VARCHAR(10),
    score INT
);

-- 插入数据
INSERT INTO students VALUES
(1, '张三', '一班', 85),
(2, '李四', '二班', 92),
(3, '王五', '一班', 78),
(4, '赵六', '二班', 65),
(5, '孙七', '一班', 88);
练习1:排序查询
sql
-- 1. 按分数从高到低排
SELECT * FROM students ORDER BY score DESC;

-- 2. 先按班级排,再按分数排
SELECT * FROM students ORDER BY class, score DESC;
结果对比:

text
按分数排序(降序):
id  name  class  score
2   李四   二班    92
5   孙七   一班    88
1   张三   一班    85
3   王五   一班    78
4   赵六   二班    65

二、GROUP BY(分组):把相同的数据放一起

bash 复制代码
最简单格式
sql
SELECT 列名, 统计函数(列名)
FROM 表名
GROUP BY 列名;

常用统计函数

函数 意思 例子

COUNT() 数一数有多少个 COUNT( )

SUM(列名) 加起来是多少 SUM(score)

AVG(列名) 平均是多少 AVG(score)

MAX(列名) 最大的是多少 MAX(score)

MIN(列名) 最小的是多少 MIN(score)

bash 复制代码
例子1:统计每个班的人数
sql
SELECT 
    class AS '班级',
    COUNT(*) AS '人数'
FROM students
GROUP BY class;
结果:

text
班级  人数
一班    3
二班    2
例子2:统计每个班的平均分
sql
SELECT 
    class AS '班级',
    AVG(score) AS '平均分'
FROM students
GROUP BY class;
结果:

text
班级  平均分
一班    83.6667
二班    78.5000
练习2:分组查询
sql
-- 1. 每个班的最高分
SELECT class, MAX(score) FROM students GROUP BY class;

-- 2. 每个班的总分
SELECT class, SUM(score) FROM students GROUP BY class;

三、HAVING(分组后的筛选)

bash 复制代码
最简单格式
sql
SELECT 列名, 统计函数(列名)
FROM 表名
GROUP BY 列名
HAVING 统计函数(列名) 条件;
bash 复制代码
例子:找平均分大于80的班级
sql
SELECT 
    class,
    AVG(score) AS avg_score
FROM students
GROUP BY class
HAVING AVG(score) > 80;
练习3:HAVING使用
sql
-- 1. 找人数的班级
SELECT class, COUNT(*) FROM students 
GROUP BY class 
HAVING COUNT(*) >= 3;

-- 2. 找最高分大于85的班级
SELECT class, MAX(score) FROM students 
GROUP BY class 
HAVING MAX(score) > 85;

四、LIMIT(限制显示多少条)

bash 复制代码
最简单格式
sql
-- 显示前N条
SELECT * FROM 表名 LIMIT 数量;

-- 显示第M条开始的N条(分页用)
SELECT * FROM 表名 LIMIT M, N;
例子1:显示前3名
sql
-- 显示分数最高的3个人
SELECT * FROM students 
ORDER BY score DESC 
LIMIT 3;
例子2:分页显示(每页2条)
sql
-- 第1页
SELECT * FROM students LIMIT 0, 2;

-- 第2页
SELECT * FROM students LIMIT 2, 2;

-- 第3页
SELECT * FROM students LIMIT 4, 2;

五、完整例子(一步步来)

bash 复制代码
步骤1:创建销售表
sql
CREATE TABLE sales (
    id INT,
    product VARCHAR(20),
    salesperson VARCHAR(20),
    amount DECIMAL(10,2),
    sale_date DATE
);

INSERT INTO sales VALUES
(1, '手机', '张三', 2999, '2023-10-01'),
(2, '电脑', '李四', 6999, '2023-10-01'),
(3, '手机', '张三', 2999, '2023-10-02'),
(4, '平板', '王五', 3999, '2023-10-02'),
(5, '电脑', '李四', 6999, '2023-10-03'),
(6, '手机', '王五', 2999, '2023-10-03');
步骤2:各种查询练习
练习1:按销售员分组,看每个人卖了多少钱

sql
SELECT 
    salesperson AS '销售员',
    SUM(amount) AS '总销售额'
FROM sales
GROUP BY salesperson
ORDER BY SUM(amount) DESC;
练习2:找销售额大于5000的销售员

sql
SELECT 
    salesperson,
    SUM(amount) AS total
FROM sales
GROUP BY salesperson
HAVING SUM(amount) > 5000;
练习3:按产品分组,看每个产品卖了多少

sql
SELECT 
    product AS '产品',
    COUNT(*) AS '销售次数',
    SUM(amount) AS '总金额'
FROM sales
GROUP BY product;
练习4:显示销售额前2名的销售员

sql
SELECT 
    salesperson,
    SUM(amount) AS total
FROM sales
GROUP BY salesperson
ORDER BY total DESC
LIMIT 2;

📌 终极简版(就记这些)

排序:ORDER BY 列名 ASC/DESC

分组:GROUP BY 列名 + COUNT/SUM/AVG

分组筛选:GROUP BY后面加HAVING

限制条数:最后加LIMIT 数字

格式:

bash 复制代码
sql
SELECT 列 
FROM 表 
WHERE 条件 
GROUP BY 列 
HAVING 条件 
ORDER BY 列 
LIMIT 数字;

记住这个顺序,MySQL查询就掌握了! 🎯

相关推荐
阳光九叶草LXGZXJ8 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客8 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
OnlineProxy11 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋20112 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_13 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼13 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川13 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路14 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna14 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白14 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库