Search code examples
mysqlif-statementcasesql-order-by

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


I have a SELECT query which have ORDER BY

What I want is

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

Is it possible to place CASE inside IF condition and how?

I tried

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

Solution

  • I don't think you can nest case statement within if statement.

    But you can nest case within case statement.

    Try,

    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    
    

    See example here