首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >snowflake LISTAGG as `as`

snowflake LISTAGG as `as`
EN

Stack Overflow用户
提问于 2020-09-15 11:59:44
回答 2查看 937关注 0票数 0

我试图在我的子查询中使用snowflake LISTAGG函数这就是我正在做的,但我没有得到任何结果:

代码语言:javascript
复制
SELECT * FROM table WHERE uuid IN (SELECT LISTAGG(''''||uuid||'''', ',') as UUIDS from same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable)

当我只是运行子查询时,它会给出正确的结果,如下所示

代码语言:javascript
复制
SELECT LISTAGG(''''||UUID||'''', ',') AS UUIDS FROM same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable

Result:
'ad','adsa','sad'

当我像这样直接使用查询时,它会给出正确的结果

代码语言:javascript
复制
SELECT * FROM table WHERE uuid IN ('ad','adsa','sad')

但是我不能理解为什么它不能直接在in子句中工作。任何帮助我们都将不胜感激。

uuid是一个varchar(13),如果这有帮助的话

编辑: Hi @FelipeHoffa。我必须使用聚合,因为最终我必须在一个列中获取UUID,以便在另一个查询中使用它。想象一下,如果您有多个列,如下所示:

代码语言:javascript
复制
uuid.                amount              tax
adsa.                  5000.             100
ad.                     100.              10
sad.                   7000.             154

然后我想要这样的东西

代码语言:javascript
复制
uuids.                              amount.            tax.  
'ad, adsa, sad'.                     12100.            264. 
EN

回答 2

Stack Overflow用户

发布于 2020-09-15 16:14:35

为什么它会起作用?Listagg创建单个字符串,而IN查找一组值(如一列)。

因此,如果你做一个listagg,你会得到'a,b,c‘而不是'a','b','c’,最后你的in将为'a,b,c‘字符串工作,而不是'a’,'b‘或'c’。要找到其中的任何一个,您需要使用子字符串。下面是一些示例:

https://www.geeksforgeeks.org/sql-listagg/

票数 0
EN

Stack Overflow用户

发布于 2020-09-16 03:45:52

根据您的编辑中的示例输入和输出,应该可以执行以下操作:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63894865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档