Impala SQL 将多个值合并为 1

Posted

技术标签:

【中文标题】Impala SQL 将多个值合并为 1【英文标题】:Combine multiple value into 1 for Impala SQL 【发布时间】:2021-10-06 03:27:30 【问题描述】:

我想将多个产品条目合并为 1,并将它们的价格相加。目前,数据库如下所示:

Name                Product               Price
Zack                Vanilla Twist         1
Jane                Lolipop               0.5
Zack                Lolipop               0.5
Zack                Candymint             0.5
Jane                ChocoLoco LM          1.5

我想把它的外观改成这样:

Name                Product                                 sum(Price)
Zack                Vanilla Twist, Lolipop, Candymint       2
Jane                Lolipop, ChocoLoco LM                   2

如何使用 Impala SQL 做到这一点?

【问题讨论】:

【参考方案1】:

此查询适用于 mysql,这可能会对您有所帮助。

select Name, group_concat(`product` separator ', ') Product, sum(Price)
from tempt
group by Name
order by Name desc

dbfiddle here

【讨论】:

Impala 中的语法会略有不同impala.apache.org/docs/build/html/topics/…【参考方案2】:
declare @temp table (Name varchar(50), product varchar(50), Price decimal(3,1))
insert into @temp values ('Zack','Vanilla Twist',1)
insert into @temp values ('Jane','Lolipop',0.5)
insert into @temp values ('Zack','Lolipop',0.5)
insert into @temp values ('Zack','Candymint',0.5)
insert into @temp values ('Jane','ChocoLoco LM',1.5)

-- No cursor, Whil loop, or User defined function:
SELECT 
  Name,
  STUFF((
    SELECT ', ' + product 
    FROM @temp 
    WHERE (name = Results.name) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,2,'') AS Product
  ,sum(Price) as [Sum(Price)]
FROM @temp Results
GROUP BY name

输出:

Name    Product                             Sum(Price)
Jane    Lolipop, ChocoLoco LM               2
Zack    Vanilla Twist, Lolipop, Candymint   2

【讨论】:

以上是关于Impala SQL 将多个值合并为 1的主要内容,如果未能解决你的问题,请参考以下文章

当列数不相等而不将每个列定义为 NuLL 时,有没有办法在 Impala SQL 中合并两个表

PySpark 或 SQL:消耗合并

Impala SQL:合并具有重叠日期的行。不支持 WHERE EXISTS 和递归 CTE

将其他类型转换为 Impala 数组

如何使用 Python Pandas 合并多个 CSV 文件

将多个 SQL Server 表合并为一个