Как сгруппировать mysql строк с одинаковым значением столбца в одну строку в ClickHouse? - PullRequest
0 голосов
/ 17 июня 2020

Я использую этот запрос в 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 "и всегда может иметь значения" Ca sh "," 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 Ответ

0 голосов
/ 17 июня 2020
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

...