使用HAVING过滤寻找GROUP行的低占用空间解决方案

问题描述 投票:1回答:1

这是一张桌子

id    date     name
1     180101      josh
2     180101      peter
3     180101      julia
4     180102      robert
5     180103      patrick
6     180104      josh
7     180104      adam

我需要得到与'josh'有相同日子的所有名字。如何在不将整张桌子拼凑在一起的情况下实现它。我需要保持高效(这不是我真正的表,我只是简化了我的问题,我有成千上万的记录,99%的行有不同的日期,所以按日期分组的行是很少见的)。

基本上我想要的是:如果'josh'是目标,我需要得到'josh,peter,julia,adam'(实际上前10个不同的名字与josh共享同一个日期)。

SELECT  
    COUNT(date) as datecount,
    GROUP_CONCAT(DISTINCT name) as names,  
FROM  
    table 
GROUP BY  
    date
HAVING 
     datecount>1
     // && name IN ('josh') would work nice for me, but im getting error because 'name' is not in GROUPED BY
LIMIT 10

任何的想法 ?正如我所提到的,它需要很快,并且大多数行都有唯一的日期

mysql
1个回答
1
投票

date上加入表格:

select distinct t1.name
from tbl t1
join tbl t2 using (date)
where t2.name = 'josh'

Demo

为获得最佳性能,您可以获得(name)(date, name)的索引。

© www.soinside.com 2019 - 2024. All rights reserved.