MySQL排序你真的掌握了吗?5个问题考考你

文章详细描述了如何使用SQL语句对`student`表中的数据进行各种排序,包括按金钱金额降序、年龄升序,以及特殊条件下的姓名和数字排序,以及针对特定姓名的优先级排序。

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

测试sql数据

CREATE TABLE `student` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `age` int DEFAULT NULL,
  `money` int DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `index_name` (`age`)
);
INSERT INTO `student` VALUES (1, '张三', 22, 1000);
INSERT INTO `student` VALUES (2, '李四', 23, 1000);
INSERT INTO `student` VALUES (3, '王五', 24, 2000);
INSERT INTO `student` VALUES (4, '赵六', 10, 1500);
INSERT INTO `student` VALUES (5, '孙七', 21, 2000);
INSERT INTO `student` VALUES (6, '周八', 30, 1200);
INSERT INTO `student` VALUES (7, '吴九', 21, 1100);
INSERT INTO `student` VALUES (8, '郑十', 21, 1400);
INSERT INTO `student` VALUES (9, '张三哥哥', 23, 1231);
INSERT INTO `student` VALUES (10, '李四姐姐', 25, 1000);
INSERT INTO `student` VALUES (11, '1张三', 21, 1000);
INSERT INTO `student` VALUES (12, '2张三', 21, 1000);
INSERT INTO `student` VALUES (13, '11张三', 23, 1000);

在这里插入图片描述

问题一: 请按拥有的money进行从大到小排序

在这里插入图片描述

问题二: 请按拥有的money进行倒序,相同money的情况下以年龄从小到大排序
在这里插入图片描述

问题三: 按姓名拼音排序
在这里插入图片描述

问题四: 如果名字开头中含有数字,请按数字从大到小排序,开头不含数字的名字按拼音排序
在这里插入图片描述

问题五: 按 张三、李四、王五的顺序进行排序,剩下以上述的规则排序
在这里插入图片描述

参考答案:


-- 请按拥有的money进行倒序
select * from student order by money desc;

-- 请按拥有的money进行倒序,相同money的情况下以年龄从小到大排序
select * from student order by money desc, age;

-- 按 姓名拼音排序
select * from student order by CONVERT(name USING gbk);

-- 如果名字开头中含有数字,请按数字从大到小排序,开头不含数字的名字按拼音排序
select * from student order by IF(name REGEXP '^[0-9]', 1, 2),
                               IF(name REGEXP '^[0-9]', CAST(name AS SIGNED), 0) DESC,
                               CONVERT(name USING gbk);

-- 按 张三、李四、王五的顺序进行排序,其他数据按money进行倒序,相同money的情况下以年龄从小到大排序
select * from student order by
        CASE name
        WHEN '张三' THEN 1
        WHEN '李四' THEN 2
        WHEN '王五' THEN 3
        ELSE 4
        END, money desc, age;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值