2017-06-05 60 views
0

我的工作問題將由以下規則我的排序輸出:MySQL的 - 排序條件

order by g.grade asc, s.name asc 

如果g.grade < = 8,如果g.grade> 8

,那麼,那麼

order by g.grade desc, s.marks asc 

如何做到這一點?

回答

0

使用case when

ORDER BY CASE WHEN g.grade > 8 THEN g.grade ELSE (0 - g.grade) END asc, 
     CASE WHEN g.grade > 8 THEN s.name ELSE s.marks END asc 
+0

你的第二個'CASE'表達有問題。一個分支產生一個'varchar',另一個產生一個數字。這在大多數RDBMS中不起作用,即使它在MySQL中工作,也應該避免。 –

+0

@TimBiegeleisen嗯,你說得對,我正在考慮如何解決這個問題。 – Blank

+0

我想不出辦法,但好消息是您的答案可能對MySQL有用。 –