Snowflake cloud data platform 雪花列表`
我试图在我的子查询中使用snowflake Listag函数 我就是这样做的,但我没有得到任何结果:Snowflake cloud data platform 雪花列表`,snowflake-cloud-data-platform,listagg,snowflake-task,Snowflake Cloud Data Platform,Listagg,Snowflake Task,我试图在我的子查询中使用snowflake Listag函数 我就是这样做的,但我没有得到任何结果: SELECT * FROM table WHERE uuid IN (SELECT LISTAGG(''''||uuid||'''', ',') as UUIDS from same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable) 当我刚刚运行子查询时,它会给出这样的正确结果 SELECT
SELECT * FROM table WHERE uuid IN (SELECT LISTAGG(''''||uuid||'''', ',') as UUIDS from same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable)
当我刚刚运行子查询时,它会给出这样的正确结果
SELECT LISTAGG(''''||UUID||'''', ',') AS UUIDS FROM same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable
Result:
'ad','adsa','sad'
SELECT * FROM table WHERE uuid IN ('ad','adsa','sad')
当我像这样直接使用查询时,它给出了正确的结果
SELECT LISTAGG(''''||UUID||'''', ',') AS UUIDS FROM same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable
Result:
'ad','adsa','sad'
SELECT * FROM table WHERE uuid IN ('ad','adsa','sad')
但是我无法理解为什么它不能直接在in子句中工作。
任何帮助都将不胜感激
uuid是一个varchar(13),如果这有帮助的话
编辑:
你好,菲利佩霍法。我必须使用聚合,因为最终我必须在一个列中获取UUID,然后在另一个查询中使用它。想象一下,如果您有多个这样的列:
uuid. amount tax
adsa. 5000. 100
ad. 100. 10
sad. 7000. 154
那我想要像这样的东西
uuids. amount. tax.
'ad, adsa, sad'. 12100. 264.
为什么它会起作用?Listagg创建一个字符串,而IN正在查找一组值(如列) 因此,如果你做一个listagg,你会得到'a,b,c'而不是['a','b','c',最后你的in将用于'a,b,c'字符串,但不用于'a'或'b'或'c'。要查找其中任何一个,您需要使用子字符串。以下是一些例子:
根据编辑中的示例输入和输出,类似的内容应该可以工作:
SELECT LISTAGG(uuid), SUM(amount), SUM(tax)
FROM TABLE
WHERE uuid IN
(SELECT uuid
FROM same_table
WHERE condition1 = TRUE
AND condition2 = TRUE
)
;
如果这不是您想要的,那么有一个更完整的输入和所需输出示例会有所帮助
如果不希望重复相同的uuid,您可能还需要添加一个独特的,即listagg(独特的uuid)。为什么需要
listagg()
?您可能可以在()中执行
,而不使用它。