首页 > 解决方案 > 如何修改 sql 查询以仅在出现次数大于 3 时才显示附加信息?

问题描述

这个问题中,解决方案显示了如何计算每个唯一酸的 desid 出现次数。您如何修改该问题的解决方案,以便提供有关大于 3 的计数的额外信息?

例如,如果我有一个表结构,如:

create table mytable (
    desid bigint not null,
    ancid bigint not null
  );

insert into mytable (ancid,desid) values (1,10);
insert into mytable (ancid,desid) values (1,20);
insert into mytable (ancid,desid) values (1,21);
insert into mytable (ancid,desid) values (1,22);
insert into mytable (ancid,desid) values (2,30);
insert into mytable (ancid,desid) values (3,40);
insert into mytable (ancid,desid) values (3,41);
insert into mytable (ancid,desid) values (3,42);
insert into mytable (ancid,desid) values (3,43);

create table desinfo (
        desid bigint not null,
        age bigint not null,
        size bigint not null
      );
  
insert into desinfo (desid, age, size) (10, 22, 100); 
insert into desinfo (desid, age, size) (20, 23, 101); 
insert into desinfo (desid, age, size) (21, 24, 102); 
insert into desinfo (desid, age, size) (22, 25, 103); 
insert into desinfo (desid, age, size) (30, 26, 104); 
insert into desinfo (desid, age, size) (40, 27, 105); 
insert into desinfo (desid, age, size) (41, 28, 106); 
insert into desinfo (desid, age, size) (42, 29, 107); 
insert into desinfo (desid, age, size) (43, 30, 108); 

这个问题的解决方案中,我们可以运行以下查询:

SELECT   ancid, COUNT(*)
FROM     mytable
GROUP BY ancid

这给了我这样的输出:

4 rows with ancid=1
1 rows with ancid=2
4 rows with ancid=3

如何修改查询以获取有关 desid 计数 > 3 的其他信息。例如,具有 ancsid=1 和 ancsid=3 的 4 个 desids 我想要“年龄”和“大小”属性。

标签: sql

解决方案


count您可以按如下方式使用分析功能:

select * from
(SELECT t.*, COUNT(*) over (partition by ancid) as cnt
   FROM mytable t ) t
where cnt > 3

推荐阅读