我有一個包含 user_id、時間(間隔六小時)和平均保證金的表。我想按 user_id 和時間(時間升序)分組。
該表如下所示:
| 用戶身份 | 時間 | 平均保證金 |
|---|---|---|
| 5696 | 2020-10-12 00:00:00 | 0.29 |
| 5426 | 2020-10-08 12:00:00 | 0.38 |
| 5696 | 2020-10-12 06:00:00 | 0.47 |
| 5512 | 2020-10-08 12:00:00 | 0.06 |
| 5238 | 2020-10-08 12:00:00 | 0.80 |
| 5696 | 2020-10-12 00:00:00 | 0.72 |
| 5698 | 2020-10-08 12:00:00 | 0.64 |
| 5732 | 2020-10-12 06:00:00 | 0.27 |
| 5696 | 2020-10-08 12:00:00 | 0.75 |
| 5238 | 2020-10-08 12:00:00 | 0.32 |
我希望結果如下所示:
| 用戶身份 | 時間 | 平均保證金 |
|---|---|---|
| 5696 | 2020-10-08 00:00:00 | 0.29 |
| 5696 | 2020-10-12 06:00:00 | 0.75 |
| 5696 | 2020-10-12 12:00:00 | 0.47 |
| 5696 | 2020-10-13 18:00:00 | 0.75 |
| 5238 | 2020-10-08 12:00:00 | 0.80 |
| 5238 | 2020-10-09 06:00:00 | 0.72 |
| 5238 | 2020-10-11 12:00:00 | 0.64 |
| 5732 | 2020-10-12 06:00:00 | 0.27 |
| 5512 | 2020-10-08 12:00:00 | 0.06 |
| 5426 | 2020-10-08 12:00:00 | 0.32 |
首先是按user_id分組,然后按時間升序分組。
下面是我的代碼:
SELECT user_id,
Time,
AVG(margin) AS average_margin
FROM
(SELECT user_id,
TIMESTAMP_SECONDS(360*60 * DIV(UNIX_SECONDS(ordered_time), 360*60)) AS Time, # six hours interval
SAFE_DIVIDE(SUM(gross_revenue), SUM(turnover)) AS margin
FROM `table1`
GROUP BY user_id, Time) a
GROUP BY user_id, Time
請忽略第二個表的 average_margin 列中的一些值,因為我手動鍵入了表,所以有些值不在正確的位置。
另外,另一個問題是我正在使用的代碼,SAFE_DIVIDE因為我有一個除以零的錯誤: -0.2 / 0。如果有人知道如何解決這個問題,因為我不想要空值而是計算數字。
非常感謝您的幫助,如果我需要進一步澄清任何事情,請告訴我。
uj5u.com熱心網友回復:
我拿走了你的原始表格并執行了查詢
SELECT * FROM `table` order by `user_id`, `time`
超過它。我的結果是

我想我從你的問題中遺漏了一些東西?如果您可以在此答案的背景關系中進行解釋,那將有所幫助。如果它與您的問題不接近,我將洗掉此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521399.html
標籤:Google Cloud Collective 约会时间通过...分组谷歌大查询数据分区
