我有一个查询在表上找到重复的值:
SELECT
crl_id,
COUNT(crl_id)
FROM
crl_table
WHERE
crl_id !=0
GROUP BY
crl_id
HAVING COUNT (crl_id) >1
这给了我结果(如果存在重复值):
crl_id: 15755 count:2
当我在查询中添加其他列时(例如此表中主键的ID):
SELECT
pk_crl_id,
crl_id,
COUNT(crl_id)
FROM
crl_table
WHERE
crl_id !=0
GROUP BY
pk_crl_id, crl_id
HAVING COUNT (crl_id) >1
没有给出结果,好像没有重复的值退出(它们确实存在!)。请帮忙。
答案 0 :(得分:3)
如果您将PK添加到组中,则每个组不能超过一行,因为PK列是唯一的。
如果您想要其他列但按子集分组,则可以使用窗口函数:
Using shoulda-matchers 3.0.1 from git://github.com/thoughtbot/shoulda-matchers.git (at master@db67d27)
Using capybara 2.6.0.dev from git://github.com/jnicklas/capybara.git (at master@e6886de)
答案 1 :(得分:0)
主键是唯一的。因此,如果您在组中添加主键,那么您将永远不会获得重复值。试试这个查询。
SELECT pk_crl_id
FROM crl_table
WHERE crl_id IN (SELECT crl_id
FROM crl_table
WHERE crl_id !=0
GROUP BY crl_id
HAVING COUNT (crl_id) >1);
答案 2 :(得分:0)
另一种方法 - 每个"重复生产一行" crl_id
,以逗号分隔列表中显示的相应PK值,如下所示:
select crl_id, count(crl_id) as ct,
listagg(pk_crl_id, ',') within group (order by pk_crl_id) as pk_list
from crl_table
where crl_id != 0
group by crl_id
having count(crl_id) > 1
;