当 max==0 时 max 和 MySQL 的奇怪行为

Odd behavior of max and having in MySQL when max==0

我有以下 table:

mysql> select * from foo;
| id | value | bar  |
+----+-------+------+
|  1 |     2 |    3 |
|  2 |     0 |    3 |
|  1 |     1 |    5 |

我想 select 每个 id 最大 value 的元组。但是,当 max(value) 为 0 时,我没有得到结果。

mysql> select id,max(value),bar from foo group by id having max(value);
| id | max(value) | bar  |
+----+------------+------+
|  1 |          2 |    3 |

这是否应该像那样表现?如果是,为什么?

HAVING 不能以任何方式用于从 GROUP BY 子句中使用的字段定义的一组记录中挑选一条记录。它更适用于整个组。

因此,在您的情况下,您必须进行自连接才能获得 table 字段的其余部分:

select t1.id, t1.value, t1...
from foo as t1
join (
   select id, max(value) as max_value
   from foo 
   group by id
) as t2 on t1.id = t2.id and t1.value = t2.max_value

恕我直言,您可以通过乘以 (id x value) 得到 MAX 对。

create table foo(id int, value int);
insert into foo values
(2,0),
(1,0),
(2,1),
(3,0),
(2,2);

select id, value
from foo
order by (id * value) desc
limit 1;

id | value
 2 |  2

drop table foo;