GROUP BY 语句
group by可以将数据集按照某个字段划分为不同的组,可以在group by的基础上加以利用count、sum、max、min等聚合函数在组上进行数据处理
select name,sum(source) from test.student group by id; -- 查询每个人的姓名及总成绩
group by id就是按学号进行分组,sum(source)就是显示每一组的总成绩(即每个学号对应的成绩)
HAVING 语句
having经常与group by语句连用,用于过滤group by语句返回的数据集。弥补了聚合函数不能与where关键词连用的缺陷。
select name,sum(source) from test.student group by id having sum(source)>230; -- 查询总成绩超过230的学生姓名及总成绩
having sum(source)>230就是一个过滤条件,只有总成绩超过230的记录才会显示。
MSSQL报错信息得到表的列名
select * from student having 1=1;
因为要查询所有字段。在表中,从左开始第一个字段就是id,而student.id没有包含在group by当中,而每一列都存在id数据,数据库会因不知道该返回哪一条数据而报错,并且报错信息中包含此列student.id
select * from student group by id having 1=1;
因为student.name没有包含在group by当中,所以会报错,并且报错信息中包含此列student.name
依次可以得到此表所有列名。