[英]How to aggregate data based on conditions
有下表:
+--------+-------+-------+-------+
| categ. | elem. | atr_1 | atr_2 |
+--------+-------+-------+-------+
| 1 | 1 | 2 | 1 |
| 1 | 2 | 2 | 2 |
| 2 | 3 | 1 | 3 |
| 2 | 4 | 1 | 3 |
+--------+-------+-------+-------+
...我正在嘗試獲取顯示每個類別最佳元素的結果表:
+--------+--------+
| categ. | elem. |
+--------+--------+
| 1 | 2 |
| 2 | 3 |
+- ------+--------+
為了確定哪個元素是每個類別的“最佳”,系統需要檢查每個類別哪個元素具有 max(atr_1)。 如果檢索到多個元素,將查看檢索到的元素的 max(atr_2)。 如果檢索到多個元素,則其中一個結果將隨機分配給該類別。
我無法弄清楚如何聚合和使用條件語句來編寫所需的查詢。 有什么建議嗎?
我在 Google BigQuery 中使用標准 SQL。
提前致謝
我們可以在這里使用ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY category ORDER BY atr_1 DESC, atr_2 DESC) rn
FROM yourTable
)
SELECT category, element
FROM cte
WHERE rn = 1;
解決這個問題的 BigQuery'ish 方法只使用聚合:
select (array_agg(t order by atr_1 desc, atr_2 desc limit 1))[ordinal(1)].* except (atr_1, atr_2)
from t
group by categ;
以下是 BigQuery 標准 SQL
#standardSQL
SELECT AS VALUE
ARRAY_AGG(
STRUCT(categ, elem) ORDER BY atr_1 DESC, atr_2 DESC LIMIT 1
)[OFFSET(0)]
FROM `project.dataset.table`
GROUP BY categ
如果適用於您問題中的示例數據 - output 是
Row categ elem
1 1 2
2 2 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.