首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySql中按问题解决这一组问题?

如何在MySql中按问题解决这一组问题?
EN

Stack Overflow用户
提问于 2019-12-31 18:05:19
回答 3查看 59关注 0票数 1

我的表类似于命名为'score':

我想查询所有cno及其对应的平均学位,该学位至少有5名学生(sno表示学生数量),从3开始。

我尝试了以下查询语句:

代码语言:javascript
复制
select cno,avg(degree) from score where cno in (select cno from score group by cno  HAVING count(1) > 5 ) and cno like '3%';

但是,它抛出了一个错误。

我的MySql版本是8.0.18

代码语言:javascript
复制
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'practice01.score.Cno' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Error code 1055.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-31 18:09:01

您可以简单地执行以下操作:

代码语言:javascript
复制
select cno, avg(degree) from score 
where cno like '3%' 
group by cno  
HAVING count(cno) >= 5

出现此错误的原因是,当MySql的only_full_group_by模式打开时,使用GROUP BY时将应用严格的ANSI SQL规则。这意味着对一个列执行group by,可以选择其他列的聚合函数。

其他列的“聚合”表示对另一列使用聚合函数,如MIN()、MAX()或AVG()。

希望这能有所帮助。

由于您在子查询中使用group by,而在外部查询中未使用group by,因此会出现错误。

票数 3
EN

Stack Overflow用户

发布于 2019-12-31 18:09:22

您不需要子查询-您可以将having条件应用于相同的查询:

代码语言:javascript
复制
SELECT   cno, AVG(degree)
FROM     score
WHERE    cno LIKE '3%'
GROUP BY cno
HAVING   COUNT(*) >= 5
票数 2
EN

Stack Overflow用户

发布于 2019-12-31 18:13:57

代码语言:javascript
复制
select cno, avg(degree) from score 
group by cno HAVING count(cno) > 5 ) and cno like '3%';

在执行group by之后,您可以像count, sum etc一样在having子句中对分组的行查询aggregate

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59542573

复制
相关文章

相似问题

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