Warm tip: This article is reproduced from serverfault.com, please click

sql-如何分组第一列并从第二列中选择字符串取决于第三列中的数字?

(sql - How to GROUP BY first column and choose string from second one depends on number in third one?)

发布于 2020-11-29 12:17:28

我对GROUP BY的一列有问题,然后选择第二列,该列的字符串取决于第三列的计数数。

因此,我在第一列中有一个ID为ID的表,在第二列中有一个字符串,在第三列中为Count。我已经按ID和Count降序排序了。

大多数ID是唯一的,但有时ID会出现多次。在这种情况下,我只选择计数值更大的字符串。我怎样才能做到这一点?

SELECT id, string, count
FROM ...
ORDER BY id, count DESC
Questioner
Michal
Viewed
0
Gordon Linoff 2020-11-29 20:19:05

在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;