我有一个表,第一列包含States,第二列包含Zip Code。我想在同一个州找到重复的邮政编码。因此,第一列可以具有相同的值,但我需要在第二列中找到第一列中具有相同值的重复项。
表:
+---+----+------+
| Z | A | B |
+---+----+------+
| 1 | GA | 1234 |
| 2 | GA | 321 |
| 3 | GA | 234 |
| 4 | GA | 9890 |
| 5 | GA | 1234 |
+---+----+------+
查询应该返回具有重复的邮政编码的值,即1234.我有大约10000多条记录。
谢谢。
答案 0 :(得分:1)
尝试使用>>> x = [11231]
>>> y = [1,2,3,4,5]
>>> z = [1,2,3,4,1,1]
>>> min([x,y,z], key = len)
[11231]
查询并保留一式两份的邮政编码。
GROUP BY
请注意,对于给定的状态,我们可以按州和邮政编码分组,假定给定的邮政编码只出现一次。
答案 1 :(得分:0)
请尝试以下方法......
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;
此语句以子查询开始,该子查询选择在源表中多次出现的State和Zip Code的每个唯一组合(在没有表名的情况下,我将其称为tblTable
)。
然后,根据State 和 Zip Code的共享值,将此子查询的结果连接到源表。此JOIN
有效地从源表中删除了我们的结果数据集中具有唯一State / Zip Code组合的所有记录。
然后返回重复的州/邮政编码列表以及与每个配对相关联的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 );
答案 2 :(得分:0)
试试这个:
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
答案 3 :(得分:0)
听起来你想要在找到重复项的地方返回两行。这应该有效:
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
;
答案 4 :(得分:0)
您可以使用以下查询。
SELECT A, B, COUNT(*)
FROM TABLE_NAME
GROUP BY A, B
HAVING COUNT(*) > 1;