MySQL按分组,同时按列内容保留某些行

MySQL按分组,同时按列内容保留某些行,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,表中有重复的行。请参见第1行和第2行: id full_name email status active 1 John Doe john@mail.com ok 1 2 John Doe john@mail.com null 1 3 Ricky Duke rick@mail.com null 1 4 Jane Doe jane@mail.com block 1

表中有重复的行。请参见第1行和第2行:

id   full_name    email           status   active
1    John Doe     john@mail.com   ok       1
2    John Doe     john@mail.com   null     1
3    Ricky Duke   rick@mail.com   null     1
4    Jane Doe     jane@mail.com   block    1
我需要选择不同的行,而不是随机选择-一个不同的行,但是具有非空的“状态”的行

我的问题是:

SELECT full_name, email
FROM `subscribers`
WHERE active = 1 AND (status = 'ok' OR status IS NULL)
GROUP BY email
该查询随机选择不同的行,而不对“状态”字段进行优先级排序


我如何优先选择“状态”不为NULL的不同行,并仅在没有“确定”状态的行存在的情况下选择具有NULL的行?

您可以使用
row\u number()


您可以使用
行编号()


您可以使用执行条件排序的相关子查询进行筛选,并为
null
状态提供最低优先级:

select t.*
from mytable t
where t.id = (
    select id
    from mytable t1
    where 
        t1.full_name = t.full_name
        and t1.email = t.email
        and t1.active = t.active
    order by status is null, status  
    limit 1
)
这将复制定义为具有相同
全名
电子邮件
活动
的记录。您可能希望根据您对重复项的实际定义对其进行调整

id | full_name | email | status | active -: | :--------- | :------------ | :----- | :----- 1 | John Doe | john@mail.com | ok | 1 3 | Ricky Duke | rick@mail.com | null | 1 4 | Jane Doe | jane@mail.com | block | 1 id |全名|电子邮件|状态|活动 -: | :--------- | :------------ | :----- | :----- 1 |约翰·多伊|john@mail.com|好| 1 3 |里奇·杜克|rick@mail.com|空| 1 4 |简·多伊|jane@mail.com|区块| 1
您可以使用执行条件排序的相关子查询进行筛选,并为
null
状态提供最低优先级:

select t.*
from mytable t
where t.id = (
    select id
    from mytable t1
    where 
        t1.full_name = t.full_name
        and t1.email = t.email
        and t1.active = t.active
    order by status is null, status  
    limit 1
)
这将复制定义为具有相同
全名
电子邮件
活动
的记录。您可能希望根据您对重复项的实际定义对其进行调整

id | full_name | email | status | active -: | :--------- | :------------ | :----- | :----- 1 | John Doe | john@mail.com | ok | 1 3 | Ricky Duke | rick@mail.com | null | 1 4 | Jane Doe | jane@mail.com | block | 1 id |全名|电子邮件|状态|活动 -: | :--------- | :------------ | :----- | :----- 1 |约翰·多伊|john@mail.com|好| 1 3 |里奇·杜克|rick@mail.com|空| 1 4 |简·多伊|jane@mail.com|区块| 1 见