首页 > 解决方案 > 如何获取此 sql 查询

问题描述

大家好,我对这个查询有疑问,我需要获取 id 具有相同数字的行:

id2 |  num
----+------
28  | 6
28  | 104
28  | 106
50  | 6
50  | 104

预期结果:

id2 | num
----+-----
28  | 6
28  | 104
50  | 6
50  | 104

结果不包括28 106,因为没有50 106.

案例2:

id2 | num
----+-----
29  | 1
30  | 1
31  | 1

预期结果:

id2 | num
----+-----
29  | 1
30  | 1
31  | 1

检索所有,因为所有 id 的 num 都等于 1

这些数字是随机的,条件是如果有两个以上的 id,它们在第 2 列中必须具有相同的数字

标签: sqlpostgresql

解决方案


一种方法是计算每个num值的出现次数,并将其与值的数量进行比较DISTINCT id2。如果它们相同,则num每个值都会出现该id2值。然后,您可以SELECT从表中匹配这些num值的行:

SELECT *
FROM data
WHERE num IN (SELECT num
              FROM data
              GROUP BY num
              HAVING COUNT(*) = (SELECT COUNT(DISTINCT id2) FROM data))
ORDER BY id2, num

输出(对于第一个数据集):

id2     num
28      6
28      104
50      6
50      104

输出(用于第二个数据集):

id2     num
29      1
30      1
31      1

SQLFiddle 上的演示


推荐阅读