我的SQL查询返回4列“A”,“B”,“C”,“D”的结果。
假设结果是:
A B C D
1 1 1 1
1 1 1 2
2 2 2 1
是否可以获得每行中包含“A”,“B”,“C”列的重复行数。
e.g。预期的结果是:
A B C D cnt
1 1 1 1 2
1 1 1 2 2
2 2 2 1 1
我尝试使用count(*)结束。但它返回查询返回的总行数。 另一个信息是,在示例中,我只提到了3列,我需要根据这些列检查计数。但我的实际查询有8列。并且数据库中的行数很大。所以我认为分组在这里不是一个可行的选择。 任何提示都很明显。 感谢。
答案 0 :(得分:7)
也许为时已晚,但可能在oracle中作为分析函数(aka window函数)的计数可以帮助您。当我正确理解您的请求时,这应该可以解决您的问题:
create table sne_test(a number(1)
,b number(1)
,c number(1)
,d number(1)
,e number(1)
,f number(1));
insert into sne_test values(1,1,1,1,1,1);
insert into sne_test values(1,1,2,1,1,1);
insert into sne_test values(1,1,2,4,1,1);
insert into sne_test values(1,1,2,5,1,1);
insert into sne_test values(1,2,1,1,3,1);
insert into sne_test values(1,2,1,2,1,2);
insert into sne_test values(2,1,1,1,1,1);
commit;
SELECT a,b,c,d,e,f,
count(*) over (PARTITION BY a,b,c)
FROM sne_test;
A B C D E F AMOUNT
-- -- -- -- -- -- ------
1 1 1 1 1 1 1
1 1 2 4 1 1 3
1 1 2 1 1 1 3
1 1 2 5 1 1 3
1 2 1 1 3 1 2
1 2 1 2 1 2 2
2 1 1 1 1 1 1
答案 1 :(得分:3)
要查找重复项,您必须根据键列
对数据进行分组select
count(*)
,empno
from
emp
group by
empno
having
count(*) > 1;
即使每个类别(多个)存在多个记录,这也允许您按empno
进行汇总。
答案 2 :(得分:2)
您必须使用子查询来获取行数,按A,B和C分组。然后再次使用您的表(或查询)加入此子查询,如下所示:
select your_table.A, your_table.B, your_table.C, your_table.D, cnt
from
your_table inner join
(SELECT A, B, C, count(*) as cnt
FROM your_table
GROUP BY A, B, C) t
on t.A = your_table.A
and t.B = your_table.B
and t.C = your_table.C