在mysql ORDER BY中,是否可以在IF条件中使用CASE

In mysql ORDER BY, is it possible to use CASE inside IF condition

提问人:Stylus 提问时间:7/29/2023 最后编辑:Stylus 更新时间:7/29/2023 访问量:46

问:

我有一个 SELECT 查询,其中有 ORDER BY

我想要的是

if(type=2 AND (station=0 OR station=1)) 那么

SELECT * FROM table
 ORDER BY CASE type
          WHEN 1 OR 2 THEN 1
          WHEN 3 THEN 2
          ELSE 4
    END,CAST(choice AS SIGNED ) DESC

if(type=2 AND station=2) 那么

SELECT * FROM table
ORDER BY CASE type
         WHEN 1 THEN 1
         WHEN 2 THEN 2
         WHEN 3 THEN 3
         ELSE 4   
   END,CAST(choice AS SIGNED ) DESC

是否可以将 CASE 置于 IF 条件中以及如何放置?

我试过了

SELECT * FROM table
 ORDER BY IF(type=2 AND (station=0 OR station=1))
          {
          CASE type
           WHEN 1 OR 2 THEN 1
           WHEN 3 THEN 2
           ELSE 4
          END,CAST(choice AS SIGNED ) DESC
          }
          ELSEIF(type=2 AND station=2)
          {
          CASE type
           WHEN 1 THEN 1
           WHEN 2 THEN 2
           WHEN 3 THEN 3
           ELSE 4
          END,CAST(choice AS SIGNED ) DESC,
          }  
mysql if-statement 案例 sql-order-by

评论

0赞 nbk 7/29/2023
Mysql在查询中不支持这种形式的if语句
1赞 Bohemian 7/29/2023
对于所有情况,类型都必须为 2(由 IF 和 ELSEIF 强制执行),那么为什么要(绑定)在类型上使用 CASE?当类型不是 2 或 station 不是 0、1 或 2 时,顺序应该是什么?
0赞 lemon 7/29/2023
您能否将示例输入数据和预期输出以及足够的记录作为编辑添加到您的帖子中?
0赞 Stylus 7/29/2023
还有一件事我忘了提,有一种情况是 type!=2

答:

0赞 Ergest Basha 7/29/2023 #1

我认为您不能将 case 语句嵌套在 if 语句中。

但是您可以将 case 嵌套在 case 语句中。

尝试

SELECT * FROM `table`
 ORDER BY CASE WHEN type=2 AND (station=0 OR station=1) 
               THEN 
               CASE type
                    WHEN 1 OR 2 THEN 1
                    WHEN 3 THEN 2
                    ELSE 4
                    END
               WHEN type=2 AND station=2 
               THEN 
               CASE WHEN 1 THEN 1
                    WHEN 2 THEN 2
                    WHEN 3 THEN 3
                    ELSE 4   
               END
    END ,CAST(choice AS SIGNED ) DESC    

请参阅此处的示例

评论

0赞 Stylus 7/29/2023
谢谢你的回答。我尝试了查询并按预期得到了结果。