![](/img/trans.png)
[英]SQL query to find rows where a column value is equal to the sum of tow other columns in the same row
[英]Sql Query to find duplicates in 2 columns where the values in first column are same
我有一个表,其中第一列包含州,第二列包含邮政编码。 我想在同一州找到重复的邮政编码。 因此,第一列可以具有相同的值,但是我需要在第二列中找到与第一列具有相同值的重复项。
表:
+---+----+------+
| Z | A | B |
+---+----+------+
| 1 | GA | 1234 |
| 2 | GA | 321 |
| 3 | GA | 234 |
| 4 | GA | 9890 |
| 5 | GA | 1234 |
+---+----+------+
查询应返回具有重复即1234的邮政编码的值。我大约有10000多个记录。
谢谢。
尝试使用GROUP BY
查询,并保留重复出现的邮政编码。
SELECT A, B
FROM yourTable
GROUP BY A, B
HAVING COUNT(*) > 1
请注意,对于给定的状态,假设给定的邮政编码仅出现一次,我们可以按州和邮政编码进行分组。
请尝试以下...
SELECT Z AS RecordNumber,
tblTable.A AS State,
tblTable.B AS ZipCode
FROM tblTable
JOIN ( SELECT A,
B
FROM tblTable
GROUP BY A,
B
HAVING COUNT( * ) > 1
) AS duplicatesFinder ON tblTable.A = duplicatesFinder.A
AND tblTable.B = duplicatesFinder.B
ORDER BY tblTable.A,
tblTable.B,
Z;
该语句从一个子查询开始,该子查询选择在源表中多次出现的状态和邮政编码的每个唯一组合(在没有表名的情况下,我将其称为tblTable
)。
然后,该子查询的结果将根据状态和邮政编码的共享值连接到源表。 该JOIN
有效地从源表中消除了从我们的结果数据集中具有唯一的州/邮政编码组合的所有记录。
然后返回重复的州/邮政编码列表,以及与每个配对关联的Z
值。
如果您有任何问题或意见,请随时发表评论。
附录
我的代码针对使用以下脚本创建的数据库进行了发布...
CREATE TABLE tblTable
(
Z INT,
A CHAR( 2 ),
B INT
);
INSERT INTO tblTable ( Z,
A,
B )
VALUES ( 1, 'GA', 1234 ),
( 2, 'GA', 321 ),
( 3, 'GA', 234 ),
( 4, 'GA', 9890 ),
( 5, 'GA', 1234 );
尝试这个:
select A,B, count(CONCAT_WS('',A,B)) as cnt from
(select * from yourtable) as a group by A,B having count(CONCAT_WS('',A,B))>1
所有重复记录或多个记录的结果:
GA 1234 2
听起来您希望两行都返回找到重复项的位置。 这应该工作:
with cte1 as (
select
A
,B
,count(1) over (partition by A, B) as counter
from table_name
)
select
A
,B
from cte1
where 1=1
and counter > 1
order by A, B
;
如果您想知道总共有多少个重复行,则可以在最终选择中选择“计数器”字段:
with cte1 as (
select
A
,B
,count(1) over (partition by A, B) as counter
from table_name
)
select
A
,B
,counter
from cte1
where 1=1
and counter > 1
order by A, B
;
您可以使用以下查询。
SELECT A, B, COUNT(*)
FROM TABLE_NAME
GROUP BY A, B
HAVING COUNT(*) > 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.