当 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;
我有以下 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;