![](/img/trans.png)
[英]Is there a way to group together values in a column if they start with the same word in SQL Bigquery
[英]SQL - GROUP BY 3 values of the same column
我在 GBQ 中有這張表:
ClientID Type Month
XXX A 4
YYY C 4
FFX B 5
FFF B 6
XXX C 6
XXX A 6
YRE C 7
AAR A 7
FFF A 8
EGT B 8
FFF B 9
ETT C 9
我正在計算每個ClientID和Month的 Type 數量,使用這個基本查詢:
SELECT ClientID,
COUNT(DISTINCT Type) NbTypes,
Month
FROM Table
GROUP BY ClientID, Month
結果如下所示:
ClientID NbTypes Month
XXX 1 4
XXX 2 6
FFF 1 6
FFF 1 8
FFF 1 9
... ... ...
我需要做的是,計算每個 ClientID 和每個月的類型數量:最近 3 個月。
例如:
ClientID
= XXX 和Month
= 8 :我想要Type
的計數,其中Month
= 6 AND Month
= 7 AND Month
= 8 有沒有辦法用GROUP BY
做到這一點?
謝謝
如果 Google Big Query 允許,您可以在 SELECT 中使用 SELECT
SELECT ClientID,
COUNT(DISTINCT Type) NbTypes,
Month,
MAX((select count(distinct Type)
from Table t2
where t1.ClientID=t2.ClientID
and t1.month-t2.month between 0 and 3
)
) as NbType_3_months
FROM Table t1
GROUP BY ClientID, Month
您可以在聲明中使用 HAVING:
SELECT ClientID,
COUNT(DISTINCT Type) NbTypes,
Month
FROM Table
GROUP BY ClientID, Month
HAVING Month = EXTRACT(MONTH FROM CURRENT_DATE())
OR Month = EXTRACT(MONTH FROM DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 1 MONTH))
OR Month = EXTRACT(MONTH FROM DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 2 MONTH))
請注意,在您的表中似乎沒有確定年份的列,因此該語句會將所有值與當前月份的月份值分組到當前月份減去兩個月。 因此,例如,該查詢將選擇 12 月、11 月和 2021 年 10 月、2020 年、2019 年等的所有數據。
另請注意,我無法測試此語句,因為我不使用 BigQuery。
這是日期函數的來源: https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions
可以按ClientID和Month對行進行分組,統計類型數,按ClientID升序排列,按Month降序排列,然后每組select最近三個月的行。 在 SQL 中處理這種情況是迂回和復雜的,因為 SQL 僅在中途實現集合定向。 對於您的情況,您必須為每個 ClientID 獲取最大的月份,通過連接過濾器找到符合條件的記錄,然后進行分組和計數。 通常的做法是從數據庫中取出原始數據,在Python或者SPL中進行處理。 SPL,開源 Java package,更容易集成到 Java 程序中,生成更簡單的代碼。 它只用兩行代碼就完成了任務:
一種 | |
---|---|
1個 | =GBQ.query("SELECT CLIENTID, COUNT(DISTINCT TYPE) AS NBTYPES, MONTH FROM t2 GROUP BY CLIENTID, MONTH ORDER BY CLIENTID, MONTH DESC") |
2個 | =A1.group@o(#1).run(m=~.#3-3,~=~.select(MONTH>m)).conj() |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.