ORDER BY CASE WHEN 的问题,错误的行位置

时间:2021-01-26 15:09:41

标签: mysql sql

我有一个 SQL 查询,如下所示:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts 
LEFT JOIN wp_postmeta ON wp_postmeta.post_id = wp_posts.ID 
WHERE 1=1 
AND wp_posts.post_type = 'seminar' 
AND wp_posts.post_status = 'publish' 
AND wp_postmeta.meta_key = 'end' 
ORDER BY CASE WHEN wp_postmeta.meta_value+0 > 20210126 THEN wp_postmeta.meta_value+0 END ASC, wp_postmeta.meta_value+0 DESC 
LIMIT 0, 10

我想在顶部显示 meta_value 列的值大于 20210126 的行,但它们出现在默认订单条件 (wp_postmeta.meta_value+0 DESC) 之后。

如何使用此查询切换它们?

1 个答案:

答案 0 :(得分:0)

使用布尔值进行排序,将它们明确地放在首位。然后您可以分别对每个组进行排序:

ORDER BY (wp_postmeta.meta_value+0 > 20210126) DESC,  -- put the bigger ones first
         (CASE WHEN wp_postmeta.meta_value+0 > 20210126 THEN wp_postmeta.meta_value+0 END) ASC,
         wp_postmeta.meta_value+0 DESC