【问题标题】:Conditional ordering based on field contents基于字段内容的条件排序
【发布时间】:2017-01-12 20:30:40
【问题描述】:

我有一个 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 会被固定在标题上。这个字段永远不会显示,即使它看起来很丑。

【问题讨论】:

  • 我不能放心使用上述语句的唯一原因是,如果我有大量数据上传,我不能保证有人不会在 group_title 中放置一个空格,该空格将添加到前面排序结果并影响排序

标签: mysql sql sql-order-by


【解决方案1】:

如果我明白你想要什么,我认为你可以使用这样的查询:

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 ]

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多