MiwuK1 2022-04-19 20:57 采纳率: 50%
浏览 197
已结题

MySQL 数据库疑问 查询学生平均分大于60的结果


SELECT COUNT(Sno) FROM SC WHERE Sno in (SELECT DISTINCT(Sno) FROM SC GROUP BY Sno HAVING AVG(Grade) > 60 );

以上是代码, 我的疑问是:明明子查询返回的内容只有12条 但是执行整条语句 会统计出共有 37条 这是为什么?

img

img

SELECT COUNT(DISTINCT(Sno)) FROM SC WHERE Sno in (SELECT Sno FROM SC GROUP BY Sno HAVING AVG(Grade) > 60 );

如果在父查询加上distinct 就不会出现这样的情况

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-04-19 21:20
    关注

    第一条sql中的子查询,查出来的是12个不同的值,而不是行记录,然后再从sc表里去找满足这12个值的行记录,可以找到有37行(等同于 in ('11111','2222','3333','4444','5555',.....))。
    第二条sql,把行记录用distinct去重后,得到的是12个值,所以count就是12了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月19日