mySQL基于不同的WHERE不同的ORDER BY

时间:2018-10-17 19:18:46

标签: mysql

我可以分别运行每个查询,然后紧接着彼此输出数据,但我希望有一种方法可以在一个查询中进行。

我正在寻找要显示的所有记录,但所有记录的顶部都是col_1=""并进行相应的排序,然后在下面的情况下,所有具有col_1!=""的记录都进行了相应的排序(与第一{ {1}})

我希望我能解释清楚。

这里有2个示例查询,我希望按照我的描述进行处理。

order by

2 个答案:

答案 0 :(得分:0)

Select * 
from your_table 
order by col_1 <> '',
         case when col_1 = '' then col_3 else col_5 end,
         col_4,
         case when col_1 = '' then col_5 else col_3 end

答案 1 :(得分:0)

我处理此类问题的典型方法是Juergen的答案所建议的方法的一种变体,但是可以处理类型差异:

SELECT * 
FROM table AS t
ORDER BY CASE WHEN col_1 = '' THEN 0 ELSE 1 END
   , CASE WHEN col_1 = '' THEN col_5 ELSE /* valid literal value for type of col_5 */ END
   , CASE WHEN col_1 <> '' THEN col_3 ELSE /* /* valid literal value for type of col_3 */ */ END
   , col_4
   , CASE WHEN col_1 = '' THEN col_3 ELSE /* valid literal value for type of col_3 */ END
   , CASE WHEN col_1 <> '' THEN col_5 ELSE /* valid literal value for type of col_5 */ END

当字段是兼容的数据类型时,Juergen的答案可能会稍好一些(总体排序维度较小)。