mysql - 寻找使用 HAVING 过滤的 GROUP 行的低足迹解决方案

标签 mysql

这是一张表格

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

有什么想法吗?正如我提到的,它需要快速,并且大多数行都有唯一的日期

最佳答案

date 将表与自身连接:

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

Demo

为了获得最佳性能,您应该在 (name)(date, name) 上建立索引。

关于mysql - 寻找使用 HAVING 过滤的 GROUP 行的低足迹解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55471922/

相关文章:

php - mysql 和 codeigniter 的奇怪插入行为

mysql - SQL代码选择field_A与某个field_B值的field_A值匹配的记录

php - 如何在 PHP 和 MySQL 上使用循环?

mysql - 除非指定主键,否则防止从表中删除 *

mysql - 错误接近 LIMIT 但仅当我使用冒号时

C# DataGrid 更新所有行

mysql - 如何从表中获取最新日期数据

查询中的 MySql REPLACE 函数只计算一次,而不是在每一行上

javascript - 如何弹出一个带有文本框的javascript警告框来更新mysql表?

php - 传递从 mysql 表收集的下拉数据