甲骨文設置:
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