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 中合并两个表
Impala SQL:合并具有重叠日期的行。不支持 WHERE EXISTS 和递归 CTE