mysql - MySQL中group by语句后选择对应的非聚合列

标签 mysql sql aggregate-functions

我有一个临时表,它是从一个更大的表中派生出来的。

+-----+----------+---------+
| id  | phone    | attempt |
+-----+----------+---------+
|  1  | 12345678 |      15 |
|  2  | 87654321 |       0 |
|  4  | 12345678 |      16 |
|  5  | 12345678 |      14 |
|  10 | 87654321 |       1 |
|  11 | 87654321 |       2 |
+-----+----------+---------+

我需要找到与对每个电话号码进行的最高尝试相对应的 ID(唯一)。电话和尝试不是唯一的。

SELECT id, MAX(attempt) FROM temp2 GROUP BY phone

上面的查询没有返回相应最大尝试的id。

最佳答案

试试这个:

select
    t.*
from temp2 t
inner join (
    select phone, max(attempt) attempt
    from temp2
    group by phone
) t2 on t.phone = t2.phone
and t.attempt = t2.attempt;

它将返回具有给定数字的最大尝试次数的行。

请注意,如果尝试次数与该电话的最大尝试次数相同,则如果电话有多行,这将返回多个 ID。

Demo here

关于mysql - MySQL中group by语句后选择对应的非聚合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886638/

相关文章:

mysql - 避免在子查询(数据透视表)中重复同一查询中的多个表扫描

mysql - 如何计算一列中不同数据的总值(value)

mysql - 2000万行数据集,如何去除MySQL中的重复项?

sql - 删除字符串中的所有空格

sql - 在 postgres 中两个表之间的联接、聚合和转换

php - MySQL转义特殊字符

mysql - 从连接查询中获得意外结果

mysql - SchemaCrawler mysql json输出不包含参数名称

python - pandas groupby 有两个键

php - 合并两个 mysql COUNT(*) 结果,不同的列