在 sql 中,我想要一个查询,它会给我重复项。但是,我想并排查看重复项。而不是仅仅计数
In sql I want to a query in which it gives me the duplicates. However, i would like to see the duplicates side by side. Instead of just count
Select employee.id,count(employee. Id), employee.name
From employee_database
Group by employee.id, employee.name
Having count (employee.id) >1
这可能会对您有所帮助。正如伊戈尔提到的那样。
Select
e1.id,
e1.name,
e2.id as DupEmployeeID,
e2.name as DupEmployeeName
From
employee e1
JOIN employee e2
on e1.name = e2.name
AND e1.id < e2.id
order by
e1.name
示例数据
EmployeeID Name
1 Bill
2 Mary
3 Paul
4 Bill
5 Joe
6 Mary
7 Sandy
8 Mary
现在,这将起作用并且可能需要调整,因为公共部分(名称)上的 self-join,并且第一个 table 的 ID 小于第二个,将防止比较
1 Bill 4 Bill
4 Bill 1 Bill (this one will NOT be shown as the instance already counted for
但在像 Mary 这样的情况下,你会得到
2 Mary 6 Mary
2 Mary 8 Mary
6 Mary 8 Mary
现在,这可能不那么实用,但如果文件中有其他信息,如地址、phone 等,您可以将这些相应的列拉入查询,就像我用原始和“DupEmployee”列。
反馈。
我想我得到了你要找的东西,根据你给我评论的格式化回复,我得到了
EmployeeID Name Count
1 Bill 2
4 Bill 2
2 Mary 3
6 Mary 3
8 Mary 3
5 Joe 1
3 Paul 1
7 Sandy 1
这是所有名称的列表以及该名称的实例数。排序的基础是任何有 1 个以上的人首先出现并按计数顺序出现。在该顺序中,列出名称字母顺序。因此,由于我的示例中有 2 个“Bill”名称,所以首先出现的不止一个。与第二个“Mary”和每个条目类似,最后是所有单独的名称实例。
为此,您需要 pre-query 姓名和计数,然后加入回原来的 table 喜欢
select
e1.EmployeeID,
e1.Name,
NameGrp.NameCnt as count
from
employee e1
join ( select
e2.Name,
count(*) as NameCnt
from
Employee e2
group by
e2.Name ) NameGrp
on e1.Name = NameGrp.Name
order by
case when NameGrp.NameCnt > 1 then 1 else 2 end,
NameGrp.NameCnt,
e1.Name
Select employee.id,count(employee. Id), employee.name
From employee_database
Group by employee.id, employee.name
Having count (employee.id) >1
这可能会对您有所帮助。正如伊戈尔提到的那样。
Select
e1.id,
e1.name,
e2.id as DupEmployeeID,
e2.name as DupEmployeeName
From
employee e1
JOIN employee e2
on e1.name = e2.name
AND e1.id < e2.id
order by
e1.name
示例数据
EmployeeID Name
1 Bill
2 Mary
3 Paul
4 Bill
5 Joe
6 Mary
7 Sandy
8 Mary
现在,这将起作用并且可能需要调整,因为公共部分(名称)上的 self-join,并且第一个 table 的 ID 小于第二个,将防止比较
1 Bill 4 Bill
4 Bill 1 Bill (this one will NOT be shown as the instance already counted for
但在像 Mary 这样的情况下,你会得到
2 Mary 6 Mary
2 Mary 8 Mary
6 Mary 8 Mary
现在,这可能不那么实用,但如果文件中有其他信息,如地址、phone 等,您可以将这些相应的列拉入查询,就像我用原始和“DupEmployee”列。
反馈。
我想我得到了你要找的东西,根据你给我评论的格式化回复,我得到了
EmployeeID Name Count
1 Bill 2
4 Bill 2
2 Mary 3
6 Mary 3
8 Mary 3
5 Joe 1
3 Paul 1
7 Sandy 1
这是所有名称的列表以及该名称的实例数。排序的基础是任何有 1 个以上的人首先出现并按计数顺序出现。在该顺序中,列出名称字母顺序。因此,由于我的示例中有 2 个“Bill”名称,所以首先出现的不止一个。与第二个“Mary”和每个条目类似,最后是所有单独的名称实例。
为此,您需要 pre-query 姓名和计数,然后加入回原来的 table 喜欢
select
e1.EmployeeID,
e1.Name,
NameGrp.NameCnt as count
from
employee e1
join ( select
e2.Name,
count(*) as NameCnt
from
Employee e2
group by
e2.Name ) NameGrp
on e1.Name = NameGrp.Name
order by
case when NameGrp.NameCnt > 1 then 1 else 2 end,
NameGrp.NameCnt,
e1.Name