我对GROUP BY的一列有问题,然后选择第二列,该列的字符串取决于第三列的计数数。
因此,我在第一列中有一个ID为ID的表,在第二列中有一个字符串,在第三列中为Count。我已经按ID和Count降序排序了。
大多数ID是唯一的,但有时ID会出现多次。在这种情况下,我只选择计数值更大的字符串。我怎样才能做到这一点?
SELECT id, string, count
FROM ...
ORDER BY id, count DESC
在BigQuery中,你可以使用聚合:
select array_agg(t order by count desc limit 1)[ordinal(1)].*
from t
group by id;
这是为每个构造一个完整记录的数组id
。但是,此数组首先以最大计数排序-并且仅使用数组的第一个元素。这[ordinal(1)].*
只是将记录字段作为单独的列返回的一种便捷方法。
SQL中更规范的方法是:
select t.* except (seqnum)
from (select t.*,
row_number() over (partition by id order by count desc) as seqnum
from t
) t
where seqnum = 1;