You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多字段排序中如何添加日期条件实现指定排序逻辑?

实现带条件的多字段排序:将指定日期的无销量图片置于有销量图片之后

原SQL语句按销量(sales)降序、浏览量(viewcount)降序对io__image表排序:

SELECT io__image.sales, io__image.viewcount, io__image.date 
FROM io__image
ORDER BY io__image.sales DESC, 
         io__image.viewcount DESC;

你的需求是把date >= '2022-05-01'的无销量图片,放在所有有销量图片之后、其余无销量图片之前,这完全可以通过带条件的多字段排序实现,调整后的SQL如下:

SELECT io__image.sales, io__image.viewcount, io__image.date 
FROM io__image
ORDER BY 
    io__image.sales DESC,
    -- 控制无销量图片的分组顺序:符合日期条件的排在其他无销量图片前面
    CASE 
        WHEN io__image.sales = 0 AND io__image.date >= '2022-05-01' THEN 0
        WHEN io__image.sales = 0 THEN 1
        ELSE 0 -- 有销量的图片不参与这个分组排序,不影响原有顺序
    END ASC,
    io__image.viewcount DESC;

排序逻辑说明:

  1. 第一优先级:sales DESC,确保所有有销量(sales > 0)的图片排在最前面,无销量(sales = 0)的图片整体靠后
  2. 第二优先级:通过CASE语句生成的分组值,按升序排序:
    • 符合日期条件的无销量图片标记为0,排在无销量组的前面
    • 其他无销量图片标记为1,排在无销量组的后面
  3. 第三优先级:viewcount DESC,保持同组内按浏览量降序排序的原有规则

效果验证

调整后会得到你预期的排序结果:

+-------+-----------+---------------------+
| sales | viewcount | date                |
+-------+-----------+---------------------+
|     5 |         7 | 2021-04-21 19:13:21 |
|     4 |       186 | 2018-05-09 13:45:40 |
|     4 |       135 | 2018-05-11 17:22:30 |
|     3 |       157 | 2018-05-02 09:47:48 |
|     1 |         8 | 2021-08-29 11:22:55 |
|     1 |         7 | 2021-06-21 12:26:32 |
|     1 |         5 | 2021-06-21 12:40:38 |
|     1 |         4 | 2021-06-14 15:15:01 |

|     0 |        10 | 2022-07-14 12:11:25 |
|     0 |         5 | 2022-06-21 08:45:43 |

|     0 |       824 | 2021-04-21 22:12:48 |
|     0 |       430 | 2020-11-27 13:46:59 |
|     0 |       228 | 2017-10-24 09:05:40 |
|     0 |       209 | 2019-11-24 11:32:43 |
|     0 |       184 | 2018-05-02 21:26:40 |
|     0 |       174 | 2018-05-02 21:21:20 |
|     0 |       174 | 2018-05-03 09:08:53 |
|     0 |       171 | 2018-05-02 09:20:34 |

内容的提问来源于stack exchange,提问作者London Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:24:28