GROUP BY仅在同一字段中具有不同的值

时间:2019-08-01 09:48:43

标签: mysql sql group-by

如果该列值仅作为示例,我想使用查询进行分组依据

First Name   Last Name        DOB


Nimal        Herath         1987/03/15
Kamal        Bandara          Null
sunil        Perera         1988/08/20
Kasun        Sandaruwan     1985/07/02
Nimal        Herath           Null
Kamal        Bandara          Null
Sunil        Perera         1988/08/20
Kasun        Sandaruwan     1997/03/10

所以我需要让具有相同名字和姓氏和相同出生日期的用户(包括空DOB)

当我使用“分组依据”时,如果一个用户的DOB为空而另一个用户具有值,则返回具有相同值但不会返回的用户

我的结果应该如下

First Name  Last Name  DOB      Count

Kamal        Bandara   Null        2
Sunil        Perera    1988/08/20  2
Nimal        Herath     1987/03/15 2

我尝试了此查询

Select * From Users Group By FirstName,LastName,Dob HAVING Count(*) >1

这将返回所有具有相同DOB的重复用户,如果两个都为null,但不会返回一个具有dob,而另一个则为null

3 个答案:

答案 0 :(得分:1)

尝试一下:


SELECT `FirstName`, `LastName`, `DOB`, count(*) as Count
FROM table
GROUP BY `FirstName`, `LastName`, `DOB`
HAVING count(*) > 1

答案 1 :(得分:1)

您似乎想要:

select FirstName, LastName, max(dob) as dbo, count(*)
from Users
group by FirstName, LastName 
having count(distinct dob) <= 1;

Here是db <>小提琴。

答案 2 :(得分:1)

您只应group by FirstName, LastName并在HAVING子句中设置条件:

select 
  firstname, lastname, max(dob) dob, count(*) count
from users  
group by firstname, lastname
having 
  count(distinct dob) <= 1
  and
  count(*) > 1

请参见demo
结果:

| firstname | lastname | dob        | count |
| --------- | -------- | ---------- | ----- |
| Kamal     | Bandara  |            | 2     |
| Nimal     | Herath   | 1987/03/15 | 2     |
| sunil     | Perera   | 1988/08/20 | 2     |
相关问题