首页 > 解决方案 > 如何提取组出现超过一定次数的行

问题描述

我有下表

col1  col2  col3   key
A     B     C      1
A     B     B      2
A     B     B      3
A     B     D      4
B     D     C      5

我想提取组 col1、col2、col3 在表中多次出现的行。

A     B     B      2
A     B     B      3

到目前为止,我有:

SELECT col1, col2, col3, count(*)
FROM db.table
GROUP BY col1, col2, col3
HAVING count(*) > 1
col1  col2  col3   count(*)
A     B     B      2

有没有办法用 ABB 提取这些行,而不必将最终表与初始表连接起来?

标签: sql

解决方案


您可以使用存在逻辑:

SELECT col1, col2, col3, "key"
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE t2.col1 = t1.col1 AND t2.col2 = t1.col2 AND
                    t2.col3 = t1.col3 AND
                    t2."key" <> t1."key");

推荐阅读