如何在ClickHouse中将具有相同列值的mysql行分组为一行?
Posted
技术标签:
【中文标题】如何在ClickHouse中将具有相同列值的mysql行分组为一行?【英文标题】:How to group mysql rows with same column value into one row in ClickHouse? 【发布时间】:2020-06-17 14:06:23 【问题描述】:我在 ClickHouse 中使用这个查询:
SELECT DISTINCT
iap.EventId,
iap.Id as Title,
ole.RewardId,
ole.RewardGain,
if((ole.RewardType = 'Currency' and ole.RewardId = 'Cash'), ole.RewardGain, null) as Soft
FROM OpenLootboxEvent ole
ANY LEFT OUTER JOIN InAppPurchaseEvent iap
ON ole.EventSourceId = iap.EventId
WHERE iap.Id in ('superHotDeal');
此查询返回结果:
EventId Title RewardId Gain
---------------------------------------------------------------------
111 superHotDeal m3 5
111 superHotDeal m14 13
111 superHotDeal m20 25
111 superHotDeal Cash 282
111 superHotDeal Talent null
111 superHotDeal Hard null
每个“EventId”和“Title”都有6个含义,其中“RewardId”的值可以是“m1”到“m26”,它总是可以有“Cash”、“Talent”、“Hard”值。
如何检索同一行中具有相同“EventId”和“Title”的所有行?
像这样:
EventId Title man1 man1Cards man2 man2Cards man3 man3Cards Cash Talent Hard
----------------------------------------------------------------------------------------------
111 superHotDeal m3 5 m14 13 m20 25 282 null null
【问题讨论】:
【参考方案1】:select EventId, Title, groupArray(tuple(RewardId, RewardGain))
from (
SELECT DISTINCT
iap.EventId EventId,
iap.Id as Title,
ole.RewardId RewardId,
ole.RewardGain RewardGain,
if((ole.RewardType = 'Currency' and ole.RewardId = 'Cash'), ole.RewardGain, null) as Soft
FROM OpenLootboxEvent ole
ANY LEFT OUTER JOIN InAppPurchaseEvent iap
ON ole.EventSourceId = iap.EventId
WHERE iap.Id in ('superHotDeal'))
group by EventId, Title
Pivot In clickhouse
【讨论】:
您好,感谢您的帮助,但此查询返回的结果如下:| 111 |SuperHotDeal | [('m3','5'),('m2','25'),('Cash','282'),('Talent','50')] |
但每个值都需要在单独的列中,如下所示:标题:|EventId | Title | Man1 | Man1Card | Man2 | Man2Card | Man3 | Man3Card | Cash |Talent |Hard
。正如我在上面的问题中所展示的那样
然后***.com/questions/62306158/pivot-in-clickhouse
这个选项也不适合,因为请求的结果我没有静态数据,正如我在我的问题中所写的那样。但是 1 EventId 的结果始终是 6 个值
SQL 定义查询结果中的列数在查询执行之前是已知的。
@N.Ayaz 因为你的定义无法解决。以上是关于如何在ClickHouse中将具有相同列值的mysql行分组为一行?的主要内容,如果未能解决你的问题,请参考以下文章