这是我正在尝试做的事情,
获取基于 2 列的重复项(假设返回 500 行)
根据以上 2 列 + 另一列获取重复项(假设返回 100 行)
现在我想获得剩余的 400 行。简而言之,我想要所有由于 columnC 而没有重复项的重复项...
-- get duplicates based on ColumnA, ColumnB
SELECT '-'
,ColumnA
,ColumnB
,ColumnC
,COUNT(*)
FROM MainTable
...SOME joins(INNER AND left)
WHERE ColumnA IS NOT NULL
GROUP BY ColumnA
,ColumnB
,ColumnC
HAVING COUNT(*) > 1
EXCEPT
-- get duplicates based on ColumnA, ColumnB, ColumnC
SELECT '-'
,ColumnA
,ColumnB
,ColumnC
,COUNT(*)
FROM MainTable
...SOME joins(INNER AND left)
WHERE ColumnA IS NOT NULL
GROUP BY ColumnA
,ColumnB
,ColumnC
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)
我只是无法完成此查询:(
在这里使用窗口函数可能会更简单:
WITH cte AS
(
SELECT
ColumnA,
ColumnB,
ColumnC,
COUNT(*) OVER (PARTITION BY ColumnA, ColumnB)
AS count_ab,
COUNT(*) OVER (PARTITION BY ColumnA, ColumnB, ColumnC)
AS count_abc
FROM MainTable
...SOME joins(INNER AND left)
WHERE ColumnA IS NOT NULL
)
SELECT
ColumnA,
ColumnB,
ColumnC,
count_ab
FROM
cte
WHERE
count_ab > 1
AND
count_abc = 1 ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |