簡體   English   中英

BigQuery Standard SQL Group by 聚合多列

[英]BigQuery Standard SQL Group by aggregate multiple columns

示例數據集:

|ownerId|category|aggCategory1|aggCategory2|
--------------------------------------------
|  1    |  dog   |  animal    |   dogs     |
|  1    |  puppy |  animal    |   dogs     |
|  2    |  daisy |  flower    |   ignore   |
|  3    |  rose  |  flower    |   ignore   |
|  4    |  cat   |  animal    |   cats     |
 ...

希望做一個包含來自類別、aggCategory1、aggCategory2 的所有者數量的分組,例如輸出:

|# of owners|summaryCategory|
-----------------------------
|    1      |     dog       |
|    1      |     puppy     |
|    1      |     daisy     |
|    1      |     rose      |
|    1      |     cat       |
|    2      |     animal    |
|    2      |     flower    |
|    1      |     dogs      |
|    2      |     ignore    |
|    1      |     cats      |

不必是那種格式,而是希望獲得上述數據點。

謝謝!

一種方法是使用union all對數據進行反透視,然后在外部查詢中進行聚合:

SELECT category, COUNT(*)
FROM (SELECT ownerID, category
      FROM t
      UNION ALL
      SELECT ownerID, aggCategory1
      FROM t
      UNION ALL
      SELECT ownerID, aggCategory2
      FROM t
     ) t
GROUP BY category

更 BigQuery 的寫法是使用數組:

SELECT cat, COUNT(*)
FROM t CROSS JOIN
     UNNEST(ARRAY[category, aggcategory1, aggcategory2]) cat
GROUP BY cat;
SELECT COUNT(T.ownerID), T.category
FROM (
    SELECT ownerID, category
    FROM table
    UNION
    SELECT ownerID, aggCategory1
    FROM table
    UNION
    SELECT ownerID, aggCategory2
    FROM table
) AS T
GROUP BY T.category

使用GROUP BY和與您所有類別列的並集,效果會很好。

使用union all

with cte as
(
    SELECT ownerID, category as summaryCategory
    FROM table
    UNION
    SELECT ownerID, aggCategory1 as summaryCategory
    FROM table
    UNION
    SELECT ownerID, aggCategory2 as summaryCategory
    FROM table
) select count(ownerID),summaryCategory from cte group by summaryCategory

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM