在 Redshift 中按类别选择 n 个最大计数

Posted

技术标签:

【中文标题】在 Redshift 中按类别选择 n 个最大计数【英文标题】:Select n largest count by category in Redshift 【发布时间】:2017-07-28 00:31:00 【问题描述】:

我想在表格中为每组选择 X 个最常见的配对。 让我们考虑下表:

+-------------+-----------+
| identifier  |    city   |
+-------------+-----------+
| AB          |  Seattle  |
| AC          |  Seattle  |
| AC          |  Seattle  |
| AB          |  Seattle  |
| AD          |  Seattle  |
| AB          |  Chicago  |
| AB          |  Chicago  |
| AD          |  Chicago  |
| AD          |  Chicago  |
| BC          |  Chicago  |
+-------------+-----------+
西雅图,AB 发生 2 次​​li> 西雅图,AC 发生 2 次​​li> 西雅图,AD 发生 1x 芝加哥,AB 出现 2 次​​li> 芝加哥,AD 发生 2 次​​li> 芝加哥,BC 发生 1x

如果我想选择每个城市最常见的 2 个,结果应该是:

+-------------+-----------+
| identifier  |    city   |
+-------------+-----------+
| AB          |  Seattle  |
| AC          |  Seattle  |
| AB          |  Chicago  |
| AD          |  Chicago  |
+-------------+-----------+

感谢任何帮助。谢谢, 本尼

【问题讨论】:

Get top n records for each group of grouped results的可能重复 【参考方案1】:

您可以在行号中使用count 来排序每个城市组合的出现次数并选择前两个。

select city,identifier 
from (
select city,identifier
,row_number() over(partition by city order by count(*) desc,identifier) as rnum_cnt
from tbl
group by city,identifier
) t
where rnum_cnt<=2

【讨论】:

你不能在分区内使用count(*),至少在Redshift中,count应该在子查询中完成 @AlexYes 看来你可以。答案中的查询给了我正确的结果。此外,documentation 表示订单列表中允许使用表达式。 @DmitriiI。有趣的!当我看到文档时,我只想到标量表达式,我不知道 Redshift 这么聪明:) 谢谢!【参考方案2】:

使用WITH 子句:

with
    _counts as (
        select
            identifier,
            city,
            count(*) as city_id_count
        from
            t1
        group by
            identifier,
            city
    ),

    _counts_and_max as (
        select
            identifier,
            city,
            city_id_count,
            max(city_id_count) over (partition by city) as city_max_count
        from
            _counts
    )

    select
        identifier,
        city
    from
        _counts_and_max
    where
        city_id_count = city_max_count
    ;

【讨论】:

以上是关于在 Redshift 中按类别选择 n 个最大计数的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery 中按数据属性对 HTML 元素进行分组和计数

如何在熊猫中按值计数对列进行排序

Sqlite 中每个类别的前 n 个计数

在 Power BI 中按类别选择前三个价格点

在 Amazon Redshift 中按日期透视查询

在 HTMX 中按类别从项目列表中获取 ID