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

siv3szwd  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(104)

我有一个SELECT查询,它有ORDER BY
我想要的是
if(type=2 AND(station=0 OR station=1))then

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)then

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,
          }

sc4hvdpw

sc4hvdpw1#

我不认为你可以在if语句中嵌套case语句。
但是可以在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

字符串
参见示例here

相关问题