课程
/数据库
/MySQL
/与MySQL的零距离接触
SELECT sex FROM userss GROUP BY sex HAVING count(id)>=2; 这里的count(id)>=2 是意思啊?
2014-07-16
源自:与MySQL的零距离接触 4-9
正在回答
回答上面自己的问题
如果id(图内为student_id)值有一栏为NULL ,结果就不一样了
SELECT sex FROM tbl_name GROUP BY 1 HAVING count(*)>1;
SELECT sex FROM tbl_name GROUP BY 1 HAVING count(id)>1;
这俩是不是得到的结果一样
如果我having用来定义的是id的序号大于等于2的人, 那么having后面应该怎么写
qq_乔克叔叔_03170904
一人之下丶
可是SELECT sex,age FROM users GROUP BY 1 HAVING age>35,不是有一条是大于35的吗。为什么是empty set
FavorSage
画方为圆 回复 FavorSage
一人之下丶 回复 画方为圆
count()函数是返回某一列的行数。在这里count(id)也就是返回已经按sex分组之后的三列的每一列的行数
一楼的 图片很清楚就解释了,having是对分组后的结果操作。
所以sex为0的 count(id)值为8 ,而sex为nulll的count(id)值为0,
然后 开始,进行 我所示的判断, 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项,我这样解释你明白了吗?
星空飘雨_
画方为圆
看看下面的圖片,或許有幫助^^
LuckyStar_lyx
沉迷学习不能自拔_
画方为圆 回复 沉迷学习不能自拔_
qq_上善若水_176 回复 画方为圆
这里count()函数是:统计个数; 这里, sex为0的人有8个人, 8>=2满足条件, 所以输出这8个人的同样的sex:0, 所以输出是0; 另外, 有1个人的sex是NULL, 1个人不满足>=2, 所以,不输出这个人的sex:NULL, 所以不输出NULL. 综上, 输出结果只有: 0
wonderq_ubuntu
这里我也不懂呀?什么意思?count是对id计数,那么大于等于2的记录就有8条,按照sex分组后应该有两个呀,因为id=9的用户sex为空。
将分组里面人数大于等于二的分组查找出来
举报
本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识