postgresql 使用一组值进行分组和计数

erhoui1w  于 2023-03-22  发布在  PostgreSQL
关注(0)|答案(2)|浏览(214)

我有一个表,它有两个外键:
| exp_fk|bd_fk(可空)|
| - ------|- ------|
| exp_id1|bd_id1|
| exp_id2|bd_id2|
| exp_id1|bd_id2|
| exp_id2|bd_id2|
此表没有唯一性约束。
我希望能够查询有多少个exp_id具有超过1个bd_fk。因此,在上表中,我应该返回计数1,因为exp_id1具有两个唯一的bd_id(bd_id1,bd_id2),但exp_id2没有,因为它具有相同的bd_fk。
我试过:

select exp_fk, bd_fk, count(*) from table
where bd_fk is not null 
group by exp_fk, bd_fk 
having count(*) > 1;

问题是拥有并不是在寻找唯一的bd_fk。

ldioqlga

ldioqlga1#

使用子查询查找相关的exp_fk值,并对这些值进行计数:

SELECT COUNT(*)
FROM (
  -- This subquery selects all the exp_fk values that have more than one unique bd_fk.
  SELECT exp_fk
  FROM table
  GROUP BY exp_fk
  HAVING COUNT(DISTINCT bd_fk) > 1
) AS subquery
q3qa4bjr

q3qa4bjr2#

要计算具有多个唯一bd_fkexp_id's的数量,可以修改查询以使用子查询计算每个exp_id的非重复bd_fk's,然后使用另一个子查询计算具有多个非重复bd_fkexp_id's的数量
试试这个查询:

SELECT COUNT(*) AS num_exp_with_multiple_bdfk
FROM (
  SELECT exp_id, COUNT(DISTINCT bd_fk) AS num_distinct_bdfk
  FROM table
  WHERE bd_fk IS NOT NULL
  GROUP BY exp_id
) AS subquery
WHERE num_distinct_bdfk > 1;

相关问题