为了账号安全,请及时绑定邮箱和手机立即绑定

SELECT sex FROM userss GROUP BY sex HAVING count(id)>=2; 这里的count(id)>=2 是意思啊?

正在回答

10 回答

回答上面自己的问题

如果id(图内为student_id)值有一栏为NULL ,结果就不一样了

http://img1.sycdn.imooc.com//59d8405f0001a52410880565.jpg

0 回复 有任何疑惑可以回复我~

SELECT sex FROM tbl_name GROUP BY 1 HAVING count(*)>1;

SELECT sex FROM tbl_name GROUP BY 1 HAVING count(id)>1;

这俩是不是得到的结果一样


0 回复 有任何疑惑可以回复我~

如果我having用来定义的是id的序号大于等于2的人, 那么having后面应该怎么写

1 回复 有任何疑惑可以回复我~
#1

qq_乔克叔叔_03170904

我觉得应该是HAVING id>=2,但是在select那一段要加上id这个字段
2017-01-14 回复 有任何疑惑可以回复我~
#2

一人之下丶

having后面必须跟聚合函数,虽然不报错,但是不跟聚合函数写是没有意义的,因为官方出having这个语句就是为了配合聚合函数。如果你要查id>2 直接where id>2
2018-03-22 回复 有任何疑惑可以回复我~

可是SELECT sex,age FROM users GROUP BY 1 HAVING age>35,不是有一条是大于35的吗。为什么是empty set

1 回复 有任何疑惑可以回复我~
#1

FavorSage

对啊 为什么啊
2017-01-09 回复 有任何疑惑可以回复我~
#2

画方为圆 回复 FavorSage

你先用SELECT sex,age FROM users GROUP BY 1;查询。然后在用SELECT sex,age FROM users GROUP BY 1 HAVING age>35;这样你就懂了。第二个条件是在第一个筛选的结果中再次晒选,而第一的筛选中并没有age大于35的数据,你可以用第一个查询的时候看看那2个数据。然后改掉其中一个使其age大于35,然后你的第二个查询就会有结果了。
2017-02-17 回复 有任何疑惑可以回复我~
#3

一人之下丶 回复 画方为圆

= =?别以猜测来说话!我来解释吧。【having】要跟【聚合函数】对应使用才行,视频中having age>35的这样书写是错误的,所谓错误不是【语句错误】,而是【使用错误】,因为这样写没有意义,如果想找age>35那么后面不应该写having age>35,而应该写where age>35。懂了?【having不跟聚合函数使用是没意义的】,比较官方的说法是【在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。】
2018-03-22 回复 有任何疑惑可以回复我~
#4

一人之下丶

因为having需要和聚合函数一起使用,不一起使用是没有意义的。同时需要注意,having写在group by后面。上面age>35的条件需要用where写出。having是没有效果的。【注意:where 条件要写在group by前面】
2018-03-22 回复 有任何疑惑可以回复我~
查看1条回复

count()函数是返回某一列的行数。在这里count(id)也就是返回已经按sex分组之后的三列的每一列的行数

2 回复 有任何疑惑可以回复我~

一楼的 图片很清楚就解释了,having是对分组后的结果操作。

所以sex为0的 count(id)值为8 ,而sex为nulll的count(id)值为0,http://img1.sycdn.imooc.com//561e1dd30001ed2a06480390.jpg

然后 开始,进行 我所示的判断, count(id)>=2,那就是只有分组后sex为0的8满足,所以结果便为sex 的0项

同理, count(id)>=1,对于分组后的 sex的两种情况0和null的count(id)均满足,则sex的0和null项都查询到

 count(id)<5 对于分组后的sex,只有null的count(id)=1,满足,所以只能查询出sex的null项,我这样解释你明白了吗?

3 回复 有任何疑惑可以回复我~
#1

星空飘雨_

蒙蒙的
2016-12-14 回复 有任何疑惑可以回复我~
#2

画方为圆

看不懂
2017-02-17 回复 有任何疑惑可以回复我~

看看下面的圖片,或許有幫助^^

5448ba76000186d605000621.jpg

14 回复 有任何疑惑可以回复我~
#1

LuckyStar_lyx

很看粗来了
2017-01-18 回复 有任何疑惑可以回复我~
#2

沉迷学习不能自拔_

我是搞不懂为什么count<id> >2而不是count<sex> >2 难道不是sex的结果中有3组,其中有几组的结果数量大于2吗
2017-02-16 回复 有任何疑惑可以回复我~
#3

画方为圆 回复 沉迷学习不能自拔_

问题问的很好,我也想知道为什么不是用sex而是ID
2017-02-17 回复 有任何疑惑可以回复我~
#4

qq_上善若水_176 回复 画方为圆

都可以,只是用主键快一点,用sex用id用username什么的都是可以的
2017-09-25 回复 有任何疑惑可以回复我~
查看1条回复

这里count()函数是:统计个数; 这里, sex为0的人有8个人, 8>=2满足条件, 所以输出这8个人的同样的sex:0, 所以输出是0; 另外, 有1个人的sex是NULL, 1个人不满足>=2, 所以,不输出这个人的sex:NULL, 所以不输出NULL. 综上, 输出结果只有: 0

6 回复 有任何疑惑可以回复我~
#1

wonderq_ubuntu

不要误人子弟哦,,count(col_name)的意思是 统计当前列的非空记录的个数。 测试数据为: 1 name1 123456 2 name2 123456 3 name3 123456 4 name4 NULL 请注意以下查询的返回结果: 代码如下 复制代码 1,select count(*) from `user` 2,select count(name) from `user` 3,select count(password) from `user` 输出结果:4,4,3
2015-09-08 回复 有任何疑惑可以回复我~

这里我也不懂呀?什么意思?count是对id计数,那么大于等于2的记录就有8条,按照sex分组后应该有两个呀,因为id=9的用户sex为空。

1 回复 有任何疑惑可以回复我~

将分组里面人数大于等于二的分组查找出来

4 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程
意见反馈 帮助中心 APP下载
官方微信