首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAVING子句的意外行为

HAVING子句的意外行为
EN

Stack Overflow用户
提问于 2020-07-04 19:03:14
回答 1查看 35关注 0票数 1

我在MySQL中有以下表格-

代码语言:javascript
复制
runs overs
 5     6
 6     7

我正在尝试测试没有group by子句的having子句的行为。

代码语言:javascript
复制
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

这种行为背后的原因是什么?

EDIT:在反转行顺序时-

代码语言:javascript
复制
runs overs
 6     7
 5     6

输出结果如下:

代码语言:javascript
复制
select * from cricket having runs=MIN(runs);
OUTPUT-
Empty Set

select * from cricket having runs=MAX(runs);
OUTPUT-
runs overs
 6     7
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 20:12:36

您使用select、聚合函数和having子句的方式不正确..

您是否正在使用mysql 5.7之前的版本,因此该行为是允许的,但具有不可预测的结果。(对于mysql版本高于5.6的查询,默认这种查询会产生错误)

使用aggreagtion函数的准备方法是基于

在group by子句中提及聚合函数中未涉及的列

所以你的第一个查询应该是

代码语言:javascript
复制
select * 
    from cricket 
    having runs = ( 
        select min(runs) from cricket
    )

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62728315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档