如何在PostgreSQL 15中查询特定多项式组内所有项的公共变量?
解决PostgreSQL中查询多项式组内公共变量的问题
需求分析
针对指定多项式,找出每个组中所有项都包含的公共变量——即某个变量必须出现在该组的每一个项里,才会被纳入结果。
数据表结构回顾
groups表:记录多项式对应的组IDvariables表:记录每个多项式、组、项对应的变量
解决方案SQL(PostgreSQL 15)
WITH group_term_counts AS ( -- 计算指定多项式每个组的总项数 SELECT polynomial, "group", COUNT(DISTINCT term) AS total_terms FROM variables WHERE polynomial = 1 -- 替换为你要查询的多项式ID GROUP BY polynomial, "group" ), variable_term_coverage AS ( -- 计算指定多项式每个组中,每个变量覆盖的项数 SELECT polynomial, "group", variable, COUNT(DISTINCT term) AS covered_terms FROM variables WHERE polynomial = 1 -- 替换为你要查询的多项式ID GROUP BY polynomial, "group", variable ) -- 筛选出覆盖项数等于组总项数的变量(即组内所有项都包含的变量) SELECT vtc.variable FROM variable_term_coverage vtc JOIN group_term_counts gtc ON vtc.polynomial = gtc.polynomial AND vtc."group" = gtc."group" WHERE vtc.covered_terms = gtc.total_terms ORDER BY vtc."group", vtc.variable;
逻辑说明
group_term_counts:统计目标多项式每个组内的不同项总数,比如组5有3个项、组2有2个项。variable_term_coverage:统计每个组中每个变量分别出现在多少个不同项里,比如组2的变量c出现在2个项里、组5的变量o出现在3个项里。- 关联两个结果集,筛选出变量覆盖项数等于组总项数的记录——这些变量就是该组所有项的公共变量。
验证结果
针对多项式1,执行上述SQL会得到如下结果:
| variable |
|---|
| c |
| f |
| g |
| h |
| o |
| p |
(注:你提供的预期结果中重复的c应为输入笔误,实际逻辑下组2仅会输出一次c)
内容的提问来源于stack exchange,提问作者nik0x1
相关产品推荐
相关产品推荐

