具有下表:
+--------+-------+-------+-------+
| 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。
预先感谢
答案 0 :(得分:0)
我们可以在此处使用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;
答案 1 :(得分:0)
BigQuery的解决方法只是使用聚合:
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;
答案 2 :(得分:0)
以下是用于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
如果要应用于您的问题的样本数据-输出为
Row categ elem
1 1 2
2 2 3