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

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日

悬赏问题

  • ¥15 链接问题 C++LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接