计算postgres中每组至少出现k次的唯一值的数量

我有一个包含3列的表格,如下所示:

if (b.rr == classOf[A].getSimpleName) ... else ...

我希望每个组类型中具有至少k个观察值的ID计数。

在上面的示例中,如果k = 2(至少2个具有相同ID的观察值要计数),我想拥有:

ID | obs_type | Value
1      A        0.1  
1      A        0.2
1      B        0.4
2      B        0.5
2      C        0.2
2      C        0.3
3      B        0.1

因为有一个ID具有两个A型观测值,并且有一个ID具有两个C型观测值。

没有两个B型观测值的ID。

对于k = 1,我就这样做:

obs_type | count
A            1
B            0
C            1

但是我正在寻找一种适用于任意k的解决方案。

谢谢!!!!

djjyqwj 回答:计算postgres中每组至少出现k次的唯一值的数量

分两个步骤进行聚合:

k = 2,在这里:

select count(case when cnt >= 2 then cnt end),obs_type
from
(
    select count(*) cnt,obs_type
    from table_x
    group by id,obs_type
) dt
group by obs_type

派生表(子查询)返回:

             cnt obs_type
================ ========
               2 A
               1 B
               1 B
               2 C
               1 B

然后使用case表达式进行条件聚合,您将得到:

SQL>select count(case when cnt >= 2 then cnt end),obs_type
SQL&from
SQL&(
SQL&    select count(*) cnt,obs_type
SQL&    from table_x
SQL&    group by id,obs_type
SQL&) dt
SQL&group by obs_type;
                     obs_type
==================== ========
                   1 A
                   0 B
                   1 C

                  3 rows found
本文链接:https://www.f2er.com/3137143.html

大家都在问