我试图在我的子查询中使用snowflake LISTAGG函数这就是我正在做的,但我没有得到任何结果:
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')但是我不能理解为什么它不能直接在in子句中工作。任何帮助我们都将不胜感激。
uuid是一个varchar(13),如果这有帮助的话
编辑: Hi @FelipeHoffa。我必须使用聚合,因为最终我必须在一个列中获取UUID,以便在另一个查询中使用它。想象一下,如果您有多个列,如下所示:
uuid. amount tax
adsa. 5000. 100
ad. 100. 10
sad. 7000. 154然后我想要这样的东西
uuids. amount. tax.
'ad, adsa, sad'. 12100. 264. 发布于 2020-09-15 16:14:35
为什么它会起作用?Listagg创建单个字符串,而IN查找一组值(如一列)。
因此,如果你做一个listagg,你会得到'a,b,c‘而不是'a','b','c’,最后你的in将为'a,b,c‘字符串工作,而不是'a’,'b‘或'c’。要找到其中的任何一个,您需要使用子字符串。下面是一些示例:
发布于 2020-09-16 03:45:52
根据您的编辑中的示例输入和输出,应该可以执行以下操作:
SELECT LISTAGG(uuid), SUM(amount), SUM(tax)
FROM TABLE
WHERE uuid IN
(SELECT uuid
FROM same_table
WHERE condition1 = TRUE
AND condition2 = TRUE
)
;如果这不是您正在寻找的,那么拥有一个更完整的输入和所需输出的示例将会有所帮助。
如果不想重复相同的uuid,您可能还想添加一个distinct,即listagg(distinct uuid)。
https://stackoverflow.com/questions/63894865
复制相似问题