老师为什么我这里用SUM(sex),女那组会有4个人呢?

老师为什么我这里用SUM(sex),女那组会有4个人呢?

http://img1.sycdn.imooc.com//climg/5cd2e32400010b7c11250426.jpg

老师为什么我这里用SUM(sex),女那组会有4个人呢?

正在回答

登陆购买课程后可参与讨论,去登陆

10回答

同学你好,老师说的不加having查询是指去掉having age>25这个查询条件,具体的语句如下:

SELECT sex,GROUP_CONCAT(username) AS '用户名',
age AS '年龄',
COUNT(*) AS '总人数'
FROM user GROUP BY sex;

同学按照这个语句查询一下,查看结果中的age是否大于25。

祝:学习愉快~

  • MasonM 提问者 #1
    不是噢,老师,你看下我新贴出来的回答
    2019-05-10 10:46:52
提问者 MasonM 2019-05-10 13:03:59

http://img1.sycdn.imooc.com//climg/5cd505eb000161c006080214.jpg

因为表中最大只有25岁的人,但我之前的age>25,是没有大于25岁的人,所以之前没有查到记录

这次改成age>=25,就能查到记录了

提问者 MasonM 2019-05-10 10:49:00

http://img1.sycdn.imooc.com//climg/5cd4e66d0001815307640563.jpg

老师我用了你说的sql语句,查询出来的结果中的age不是大于25的

  • 所以再使用HAVING age>25进行二次删选,得到的结果为空。祝:学习愉快~
    2019-05-10 11:37:15
  • 提问者 MasonM 回复 好帮手慕阿满 #2
    啊我懂了,如果我用HAVING age>=25就能查出数据了,老师请看新回答
    2019-05-10 13:01:57
  • 提问者 MasonM 回复 好帮手慕阿满 #3
    啊我知道了,老师. 是因为,如果按照sex分组的话,那个age只显示每组第一条数据, 然后刚好显示出来的两组的age分别是24和25,所以我当时用HAVING age>25没有查询出来,请问是这样吗? 我以为可以把组内没显示出来的年龄,比如99和26或者105这些也查询出来,原来是分组的话,只把组内显示年龄的第一条拿出来筛选,请问是这样吗?
    2019-05-10 13:09:43
提问者 MasonM 2019-05-09 22:48:40

老师你的不加HAVING是这样吗?在WHERE后加age>25,这样就能查出结果,但这样不是二次筛选出来的哟

http://img1.sycdn.imooc.com//climg/5cd43da7000120ff05220294.jpg

提问者 MasonM 2019-05-09 22:42:29

老师你说的不加HAVING是这样吗?

http://img1.sycdn.imooc.com//climg/5cd43c500001a72212590432.jpg

报错噢

好帮手慕阿满 2019-05-09 15:34:12

关于第5条内容,在同学如下sql中,

http://img1.sycdn.imooc.com//climg/5cd3d35f0001156b06240306.jpg

同学去掉HAVING age>25的条件执行一下,得到的结果中age是小于等于25的,同学可以试一下。

所以加上having条件,得到的结果为空。

祝:学习愉快~

  • 提问者 MasonM #1
    为什么我加上HAVING就不行呢?不是二次筛选吗,我想从第一次筛选的结果中二次筛选出age>25的
    2019-05-09 15:59:59
  • 好帮手慕阿满 回复 提问者 MasonM #2
    问一下同学不加having的查询结果是什么呢?age是否大于25呢?建议同学将不加having的查询结果截图贴一下。祝:学习愉快~
    2019-05-09 16:17:41
  • 提问者 MasonM 回复 好帮手慕阿满 #3
    老师请看我的新回答谢谢!
    2019-05-09 22:42:45
好帮手慕阿满 2019-05-09 14:33:04

同学你好,

1、统计组中人数应该使用COUNT计数函数,而不是SUM求和函数。

2、SUM(),MAX(),MIN(),AVG()这几个函数如果统计字段不是数字,得出的可能是不正确的值。这几个都是数学函数,只能用来对数值进行计算。

3、关于where和having:having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。where在group by 之前使用,另外where后的条件表达式里不允许使用聚合函数,而having可以。

4、使用having时,having后的要么是聚合函数,要么条件中的字段出现在select中,而同学的第2个截图中不满足条件,所以报错。

5、使用having age>25查询出来是empty set是正常的,因为同学不使用having查询出来的结果中age是小于等于25,所以加上having age>25,查询结果为空。同学可以去掉having查询试试 。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


  • 提问者 MasonM #1
    谢谢老师,我还想问一下第五点你说的什么意思:因为同学不使用having查询出来的结果中age是小于等于25,所以加上having age>25,查询结果为空。同学可以去掉having查询试试 。 这是什么意思?
    2019-05-09 14:54:47
提问者 MasonM 2019-05-08 22:55:51

为什么我这样在HAVING 后面直接用逻辑条件age>25,没查询出来呢?

http://img1.sycdn.imooc.com//climg/5cd2edd20001ddbc07170428.jpg

http://img1.sycdn.imooc.com//climg/5cd2edf30001d33609970101.jpg

提问者 MasonM 2019-05-08 22:43:06

另外,我还想问一下WHERE和HAVING的区别的什么?

http://img1.sycdn.imooc.com//climg/5cd2eac30001181406790115.jpg

为什么我这样写会报错?

是不是HAVING后面必须用聚合函数?

那为什么视频中老师可以这样写?这样不是字段来的吗?

http://img1.sycdn.imooc.com//climg/5cd2eaf70001b14305270326.jpg

提问者 MasonM 2019-05-08 22:18:39

老师我想知道,如果SUM(),MAX(),MIN(),AVG()这四个函数,如果统计的字段值不是数字,那样会显示什么?

这四个函数是不是只能统计数字?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师