条件ORDER BY

时间:2016-01-31 00:53:28

标签: mysql

我有一个简单的查询。像这样:

SELECT
    id,
    item,
    action,
    desc,
    time
FROM t1
WHERE bus = 6
ORDER BY action DESC, time ASC

如果 desc ==''

,我需要修改ORDER BY部分并仅使用操作DESC

基本上它会输出结果并按ASC顺序按时间排序,如果有任何没有描述的操作将挂在顶部。是否可以在单个查询中执行?如果是,我该如何加入它?

2 个答案:

答案 0 :(得分:4)

case语句非常有用,可以让你做各种有趣的事情。可以在任何地方使用单个列。

SELECT
    id,
    item,
    action,
    t1.`desc`,
    time
FROM t1
WHERE bus = 6
ORDER BY 
  case t1.`desc` when '' then action else '' end DESC, 
  time ASC

答案 1 :(得分:1)

使用一个假排序字段进行单个查询。

SELECT
    `id`,
    `item`,
    `action`,
    `desc`,
    `time`
FROM t1
WHERE `bus` = 6
ORDER BY IF(`desc` = '', 0, 1), `action` DESC, `time` ASC

编辑:注意到OP sql包含保留字,我在答案中重复它,假设它只是样本 - 我的坏。我为未来的读者添加了反引号。