基于字段内容的条件排序

时间:2017-01-12 20:30:40

标签: mysql sql sql-order-by

我有一个包含

的SQL表
ID
Title
Group Title

所有内容都有ID,所有内容都有Title,但只有少数人有Group Title。 我想提取一份记录列表,但如果Group Title存在,我希望它取代Title
然后我想按结果排序列表;所以,
如果我有三条记录

id           title          group title
1            Womble
2            Alphabet       Zebra
3            Mirror

结果将是

id          result
3           Mirror
1           Womble
2           Zebra

如何通过单个查询实现此目标?

我怀疑我需要选择一个选择,虽然以下似乎可行,但似乎有点' hacky'和作弊

SELECT CONCAT_WS('',group_title,title) AS ordering,id,film_title,series_title 
FROM records 
ORDER BY ordering

因此,如果group titleNULL,则不会显示任何内容,但如果有,则group_title会固定在标题上。即使看起来很丑,也不会显示此字段。

1 个答案:

答案 0 :(得分:0)

如果我理解你想要什么,我想你可以使用这样的查询:

select 
    case when trim(coalesce(group_title, '')) = '' then 
        title 
    else 
        group_title 
    end ordering,
    id, film_title, series_title
from records 
order by ordering;

[ SQL Fiddle Demo ]