Amazon Redshift 按特定值排序
Posted
技术标签:
【中文标题】Amazon Redshift 按特定值排序【英文标题】:Amazon Redshift order by specific values 【发布时间】: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
【问题讨论】:
【参考方案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 这能回答问题吗?以上是关于Amazon Redshift 按特定值排序的主要内容,如果未能解决你的问题,请参考以下文章
amazon redshift 中存储的特定行的默认值在哪里?
为啥 Amazon Redshift UNLOAD 性能对于新数据要好得多?
从 Amazon Redshift 中的 json 数组中提取特定键