我在MySQL中有下表-
runs overs
5 6
6 7
我试图测试having子句而不使用group by子句的行为。
When i write-
select * from cricket having runs=MIN(runs);
OUTPUT-
runs overs
5 6
select * from cricket having runs=MAX(runs);
OUTPUT-
Empty Set
这种行为背后的原因是什么?
编辑:在颠倒行顺序时-
runs overs
6 7
5 6
输出如下-
select * from cricket having runs=MIN(runs);
OUTPUT-
Empty Set
select * from cricket having runs=MAX(runs);
OUTPUT-
runs overs
6 7
您使用select,聚合函数和having子句的方式不正确。
您可能使用的是mysql版本最近的5.7,所以这种行为是允许的,但结果是不可预测的。 (对于mysql版本>5.6,通过defualt这种查询会产生错误)
使用聚合函数,具有和选择列的preoper方法基于
在group by子句中提及聚合函数中未涉及的列
所以您的第一个查询应该是
select *
from cricket
having runs = (
select min(runs) from cricket
)
或
select c.*
from cricket c
inner join (
select overs, min(runs) min_runs
from cricket
group by overs
order by min_runs desc limit 1
) t on t.overs = c.overs
and t.min_runs = c.runs