2016-02-25 49 views
1

我有以下查詢,以谷歌的BigQuery SQL:SQL聚集的行和列

這是偉大的,但我想端口的數據到谷歌圖表,它需要的天成爲行的周,以及飲料的類型成爲專欄。然而,我的電流輸出是這樣的:

Row TypeOfDrink Sunday Monday Tuesday Wednesday Thursday Friday Saturday AmountBought  
1 Single Origin 5 31 12 25 11 17 0 101 
2 Cappuccino  35 149 130 175 153 125 41 808 
3 Caffè Mocha  24 150 161 148 176 167 6 832 

不過,我想在一週行的天,TypeOfDrinks作爲列如下:

  Single Origin Cappuccino Caffe Mocha 
Sunday 123 123  123  123 123 
Monday  123 123  123  123 123 
Tuesday 

我怎麼會去這樣做?

回答

1
SELECT 
    DoW, 
    SUM(AmountBought * (TypeOfDrink = 'Single Origin')) AS SingleOrigin, 
    SUM(AmountBought * (TypeOfDrink = 'Cappuccino')) AS Cappuccino, 
    SUM(AmountBought * (TypeOfDrink = 'Caffè Mocha')) AS CaffeMocha 
FROM (
    SELECT 
    TypeOfDrink, 
    CASE 
     WHEN (DAYOFWEEK(CreateAt)=1) THEN 'Sunday' 
     WHEN (DAYOFWEEK(CreateAt)=2) THEN 'Monday' 
     WHEN (DAYOFWEEK(CreateAt)=3) THEN 'Tuesday' 
     WHEN (DAYOFWEEK(CreateAt)=4) THEN 'Wednesday' 
     WHEN (DAYOFWEEK(CreateAt)=5) THEN 'Thursday' 
     WHEN (DAYOFWEEK(CreateAt)=6) THEN 'Friday' 
     WHEN (DAYOFWEEK(CreateAt)=7) THEN 'Saturday' 
     ELSE 'UnDefined' 
    END AS DoW, 
    DAYOFWEEK(CreateAt) AS pos, 
    COUNT(TypeOfDrink) AS AmountBought 
    FROM company_bigdata.Order 
    GROUP BY 1, 2, 3 
    ORDER BY pos 
) 
GROUP BY 1 

添加上述(跳過中間分組)的緊湊型

SELECT 
    DAYOFWEEK(CreateAt) AS pos, 
    CASE 
    WHEN (DAYOFWEEK(CreateAt)=1) THEN 'Sunday' 
    WHEN (DAYOFWEEK(CreateAt)=2) THEN 'Monday' 
    WHEN (DAYOFWEEK(CreateAt)=3) THEN 'Tuesday' 
    WHEN (DAYOFWEEK(CreateAt)=4) THEN 'Wednesday' 
    WHEN (DAYOFWEEK(CreateAt)=5) THEN 'Thursday' 
    WHEN (DAYOFWEEK(CreateAt)=6) THEN 'Friday' 
    WHEN (DAYOFWEEK(CreateAt)=7) THEN 'Saturday' 
    ELSE 'UnDefined' 
    END AS DoW, 
    SUM(TypeOfDrink = 'Single Origin') AS SingleOrigin, 
    SUM(TypeOfDrink = 'Cappuccino') AS Cappuccino, 
    SUM(TypeOfDrink = 'Caffè Mocha') AS CaffeMocha 
FROM company_bigdata.Order 
GROUP BY 1, 2 
ORDER BY 1 
+0

謝謝你,什麼是GROUP BY 1,2是指什麼?它是pos,DoW? – retrojacket

+0

這是正確的 –