MySQL排序问题:如何实现按出生日期分组+姓名排序的单条查询
MySQL排序问题:如何实现按出生日期分组+姓名排序的单条查询
没问题,完全可以用单条SQL查询实现你想要的排序效果!核心思路是在ORDER BY子句中先按「是否2010年之前出生」这个条件分组排序,再在每个分组内按姓名升序排列。
方法一:使用CASE表达式明确分组
这种方式逻辑清晰、可读性强,适合需要更复杂分组规则的场景:
SELECT name, dob FROM class_tbl ORDER BY -- 2010年前出生的标记为0,之后的标记为1,升序后0组整体在前 CASE WHEN dob < '2010-01-01' THEN 0 ELSE 1 END ASC, -- 每个分组内按姓名升序排序 name ASC;
方法二:利用MySQL布尔值特性简化写法
MySQL会自动把布尔表达式的结果转为0(false)和1(true),所以可以直接用日期比较作为排序条件,代码更简洁:
SELECT name, dob FROM class_tbl ORDER BY -- 2010年及以后出生的返回true(1),之前的返回false(0),升序后0组在前 dob >= '2010-01-01' ASC, name ASC;
这两种写法都能得到你预期的结果:2009年出生的孩子会整体排在前面,并且按姓名首字母顺序排列;2010年及以后出生的孩子排在后面,同样按姓名排序。
备注:内容来源于stack exchange,提问作者Adrien Hingert
相关产品推荐
相关产品推荐

