sql中having 子句中的字段必须出现在select列表中么?

如题所示

表结构如下:

DROP TABLE IF EXISTS student;
CREATE TABLE student (
id int(5) NOT NULL AUTO_INCREMENT,
name varchar(10) DEFAULT NULL,
subject varchar(10) DEFAULT NULL,
grade double(4,1) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8;

我要获取全部科目都及格的学生姓名,那么我这么写
例如 select name from student group by name having min(grade)>60
min(grade)并没有出现在select列表中,为什么这种写法还支持呢?
数据库MySQL 5.5

阅读 5.2k
2 个回答

为什么不支持呢?

select 是最后才处理的一个动作(projection)。这时根据having子句计算出的结果表已经准备好了,select只是选出其中特定的栏位而已。

having子句是限制哪些group出现在结果集中,和是否在select的字段中出现没有关系。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题