2013-07-31 40 views
0

我想用HiveQL來做到這一點,但我不知道如何在SQL中做到這一點。表結構如下:有條件的聚合與GROUP By子句

 
id1 id2 category 
123 abc 1 
123 def 1 
123 def 2 
456 abc 1 
123 abc 1 
123 abc 2 
... 

我想寫輸出的查詢:

 
key   count  category1count category2count 
123-abc  3    2     1 
123-def  2    1     1 
456-abc  1    1     0 

到目前爲止,我有這樣的:

SELECT concat(concat(id1,'-'), id2), count(*) , 
count(SELECT * WHERE buyingcategory = 1 ???) , 
count(SELECT * WHERE buyingcategory = 2 ???) 
FROM table 
GROUP BY concat(concat(id1,'-'), id2) 

回答

2

試試這個

SELECT concat(id1,'-', id2) `key`, count(*) , 
sum(case when category = 1 then 1 else 0 end) category1count , 
sum(case when category = 2 then 1 else 0 end) category2count 
FROM table1 
GROUP BY concat(id1,'-', id2) 

DEMO HERE

+0

謝謝!任何理由我應該擔心在這裏使用條件操作的性能?這將在大型數據集上運行(輸入大小爲8-10 GB)。但是,迄今爲止,這很有效,再次感謝! – BZapper

+0

歡迎您!爲表現我認爲這應該很好。 –