SQL排序需求:指定值置顶并按日期降序分组排序
实现指定分组排序的SQL方案
没问题,这个需求其实可以通过在ORDER BY里添加优先级判断轻松实现,核心思路是先把指定的b、c标记为高优先级组让它们整体置顶,再让两组内部各自按dates降序排序。
直接上可运行的SQL代码:
SELECT names, dates FROM your_table_name ORDER BY -- 第一步:标记优先级,b、c为1(置顶组),其他为2(普通组) CASE WHEN names IN ('b', 'c') THEN 1 ELSE 2 END, -- 第二步:两组内部均按dates降序排序 dates DESC;
代码细节解释:
CASE WHEN names IN ('b', 'c') THEN 1 ELSE 2 END:给b和c分配更小的排序权重(1),确保它们排在所有权重为2的记录前面,实现置顶效果。dates DESC:在同一个优先级组内,按照dates从大到小排序,完美满足两组分别排序的要求。
测试结果验证:
用你提供的测试数据运行后,输出会是:
| names | dates |
|---|---|
| c | 2017 |
| b | 2013 |
| a | 2016 |
| d | 2011 |
完全符合需求:b、c置顶且组内按dates降序,其余记录也按dates降序排列。
内容的提问来源于stack exchange,提问作者Rosvin John Rosales
相关产品推荐
相关产品推荐

