首页 > 试题广场 >

Mysql中表student_table(id,name,b

[单选题]
Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1001' , '' , '2000-01-01' , '男');
('1002' , null , '2000-12-21' , '男');
('1003' , NULL , '2000-05-20' , '男');
('1004' , '张三' , '2000-08-06' , '男');
('1005' , '李四' , '2001-12-01' , '女');
查询2001年及之后出生的男生、女生总数,正确的SQL是()?
  • select sex,count(*) from student_table group by sex  where birth >='2001' ;
  • select count(*) from student_table where birth >='2001' group by sex ;
  • select sex,count(*) from student_table where birth >='2001' group by sex ;
  • select sex,count(*) from student_table group by sex  having birth >='2001' ;
D报错:having子句是对聚合结果指定条件,聚合结果里根本没有birth这一列,因此having只能对以下两种情况指定条件:(1)聚合键(2)聚合函数
发表于 2022-01-19 17:46:29 回复(8)
having 啥 就得 select啥
发表于 2022-03-09 18:48:14 回复(0)
为啥不是D啊
发表于 2021-12-10 21:09:21 回复(4)
本来having设计的就是对分组后的数据进行过滤,所以having 后面只能跟聚合函数或分组的字段
发表于 2022-05-25 18:32:18 回复(0)
Select后面的字段列表里没有出现的字段,having中不能使用
发表于 2023-01-17 16:56:23 回复(0)
having只能跟聚合函数或分组的字段,having啥需要select啥
发表于 2022-09-20 08:23:10 回复(0)
having是对计数后的结果做条件判断,所以要先where做操作
发表于 2024-02-28 04:21:02 回复(0)
所以这题想用having要怎么改呢
发表于 2023-11-12 22:13:59 回复(0)
SELECT sex, COUNT(*)   
FROM student_table   
GROUP BY sex   
HAVING SUM(CASE WHEN birth >= '2001' THEN 1 ELSE 0 END) > 0;

先根据性别分组,然后计算每个性别中满足出生日期大于等于2001年的学生数量,最后只保留那些有至少一个满足条件的学生的性别。

请注意,这个查询假设birth列是日期或字符串类型,可以与'2001'进行比较。如果birth列是其他类型,可能需要不同的处理方式。

此外,这个查询也假设sex和birth列在所有记录中都有值。如果某些记录在这两个列中没有值,那么可能需要对查询进行进一步修改。

发表于 2023-09-08 14:07:28 回复(1)
select sex,count(id) from student_table where birth >= '2001-01-01' group by sex;


发表于 2023-07-08 16:57:58 回复(0)
Having 子句能够对 Group by 产生的分组条件进行过滤
发表于 2022-09-26 10:40:43 回复(0)
group by需要先选中sex
发表于 2022-02-21 17:58:41 回复(0)