甲骨文设置:
CREATE TABLE TABLE_NAME (ID1, ID2) AS (
SELECT 1, 4 FROM DUAL UNION ALL
SELECT 1, 4 FROM DUAL UNION ALL
SELECT 2, 3 FROM DUAL UNION ALL
SELECT 1, 5 FROM DUAL UNION ALL
SELECT 2, 5 FROM DUAL UNION ALL
SELECT 3, 6 FROM DUAL
);
查询:
SELECT ID1,
COUNT(DISTINCT ID2)
FROM TABLE_NAME
WHERE ID2 IN (SELECT ID2
FROM TABLE_NAME
GROUP BY ID2
HAVING COUNT(DISTINCT ID1) = 1)
GROUP BY ID1;
结果:
ID1 COUNT(DISTINCTID2)
---------- ------------------
1 1
2 1
3 1
更新 - 查询2:
SELECT ID1,
COUNT(DISTINCT ID2)
FROM (
SELECT ID1,
ID2,
COUNT(DISTINCT ID1) OVER (PARTITION BY ID2) AS CNT1
FROM Table_Name
)
WHERE CNT1 = 1
GROUP BY ID1;
来源
2016-01-28 22:54:11
MT0
这看起来是正确的查询,但在那里,这将是另一种速度更快的方法?我正在运行这个表格非常大(数十亿条记录)。 – user2276280
添加了第二个查询,该查询不会对表进行两次完整扫描(而是使用单个表扫描和解析函数)。 – MT0
快得多!谢谢! – user2276280