gpt4 book ai didi

sql - 在 Postgres STRING_AGG 中对条件数据进行排序

转载 作者:行者123 更新时间:2023-11-29 12:41:06 26 4
gpt4 key购买 nike

我提出了一个查询,以在 Postgress 中使用 STRING_AGG 基于条件语句创建串联字符串。这工作得很好,但我也想在不复制 CASE 的情况下对结果进行排序。

这是我现在拥有的:

SELECT
STRING_AGG(distinct name, ', ' ORDER BY name),
STRING_AGG(
DISTINCT
CASE WHEN something = true THEN 'type1'
WHEN something_else = true THEN 'type2'
ELSE 'type3'
END, ', '
ORDER BY
CASE WHEN something = true THEN 'type1'
WHEN something_else = true THEN 'type2'
ELSE 'type3'
END

)
from organisations

..但是我想做这样的事情来避免重复的代码并从我的查询中删除行和复杂性但是我不知道如何让它工作,这是假代码显然不起作用,但你明白了:

SELECT
STRING_AGG(distinct name, ', ' ORDER BY name) names,
STRING_AGG(
DISTINCT (
CASE WHEN something = true THEN 'type1'
WHEN something_else = true THEN 'type2'
ELSE 'type3'
END
) as types, ', ' ORDER BY types) types
from organisations

最佳答案

您不需要 string_agg()。你可以改为:

SELECT STRING_AGG(distinct name, ', ' ORDER BY name) names,
CONCAT_WS(',',
(CASE WHEN SUM( (something = true)::int ) > 0 THEN 'type1'),
(CASE WHEN SUM( (not (something = true) )::int ) > 0 THEN 'type2')
) as types
FROM organisations o;

您可能过度简化了查询,但对于您提供的内容,第二部分不需要 string_agg(distinct)

关于sql - 在 Postgres STRING_AGG 中对条件数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com