【问题标题】:Amazon Redshift order by specific valuesAmazon Redshift 按特定值排序
【发布时间】:2017-12-08 23:20:57
【问题描述】:

我是 Redshift 的新手,正在寻找一种方法来指定我想要结果的顺序,accepted answer here 正是我想要的,但是 Redshift 中不存在 FIELD 函数。有没有办法在 Redshift 中实现相同的结果?

当前查询如下所示:

SELECT DISTINCT audit_type, audit_category FROM "schema"."table"

ORDER BY audit_type,    
CASE WHEN audit_category = 'string_1' THEN 1 
  WHEN audit_category = 'string_2' THEN 2 
  WHEN audit_category = 'string_3' THEN 3 
  WHEN audit_category = 'string_4' THEN 4 
  WHEN audit_category = 'string_5' THEN 5 
  WHEN audit_category = 'string_6' THEN 6 
  WHEN audit_category = 'string_7' THEN 7 
ELSE 8 END

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    你可以使用 CASE 语句来达到同样的效果:

    ORDER BY CASE WHEN "name"='core' THEN 1 ELSE 2 END, priority
    

    您可以通过在ELSE 之前添加一个新的WHEN / THEN 部分来使用除core 之外的另一个选项来扩展列表,因此您最终要做的是将可能的name 选项列表映射到用于排序的整数行

    【讨论】:

    • CASE WHEN audit_category = 'string_1' THEN 1 WHEN audit_category = 'string_2' THEN 2 WHEN audit_category = 'string_3' THEN 3 WHEN audit_category = 'string_4' THEN 4 WHEN audit_category = 'string_5' THEN 5 WHEN audit_category = 'string_6' THEN 6 WHEN audit_category = 'string_7' THEN 7 ELSE 8 END 我试过了,但似乎还是随机排序?
    • @WillRoss 它应该排序,请在原始问题中发布整个查询
    • 将当前查询添加到原始问题中
    • @WillRoss 在您的示例 CASE 语句中,如果您想按该表达式优先排序,则应该在 order by 列表中排在第一位,然后是 audit_type
    • @WillRoss 这能回答问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多