group by按需求保留数据——mysql
2017-09-04 13:58
666 查看
在使用group by的时候,我们有时需要根据表中某个字段(学生选课——student.`class`)进行去重,但是我们要根据另一个字段(该字段也有可能是inner join关联过来的其它表的)选择去重后留下来的数据(保留同样选课中学号——student.`num`最大的学生信息)
group by在选择显示的数据的时候是默认按照选择的字段(student.`class`)顺序排列的,我们可以使用select子查询先对数据进行筛选和排序(排序order by后面根的就是我们保留参照的字段student.`num`),再进行group by,这样就可以实现保留我们需要的数据
sql语句:SELECT * FROM ( SELECT * FROM student b ORDER BY b.`num` DESC ) AS a GROUP BY a.`class` ORDER BY a.`id` DESC;
group by需要注意以下几点:
(1)Group By子句可以包含任意数目的列,因而可以对分组进行嵌套,进行更细致的分组。
(2)Group By子句中列出的每一列都必须是检索列(或者有效的表达式,注意不能是聚集函数)。如果在SELECT中使用了检索列(或者表达式),则在Group By子句中使用相同的表达式,不能使用别名。
(3)大多数SQL不允许Group By带有可变roup By子句中列出的每一列都必须是检索列(或者有效的表达式,注意不能是聚集函数)。如果在SELECT中使用了检索列(或者表达式),则在Group By子句中使用相同的表达式,不能使用别名。
长度的数据类型(如文本,text类型)。
(4)除聚集计算语句外,SELECT语句中的每一列都必须在Group By中给出。
(5)如果分组列中包含具有Null值的行,则Null将作为一个分组返回,如果列中有多行Null,他们将作为一个分组返回。
(6)Group By必须出现在Where子句之后,Order By子句之前。
(7)如果在Group By子句中嵌套了分组,数据将在最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(不能从个别的列中取回数据)。
group by在选择显示的数据的时候是默认按照选择的字段(student.`class`)顺序排列的,我们可以使用select子查询先对数据进行筛选和排序(排序order by后面根的就是我们保留参照的字段student.`num`),再进行group by,这样就可以实现保留我们需要的数据
sql语句:SELECT * FROM ( SELECT * FROM student b ORDER BY b.`num` DESC ) AS a GROUP BY a.`class` ORDER BY a.`id` DESC;
group by需要注意以下几点:
(1)Group By子句可以包含任意数目的列,因而可以对分组进行嵌套,进行更细致的分组。
(2)Group By子句中列出的每一列都必须是检索列(或者有效的表达式,注意不能是聚集函数)。如果在SELECT中使用了检索列(或者表达式),则在Group By子句中使用相同的表达式,不能使用别名。
(3)大多数SQL不允许Group By带有可变roup By子句中列出的每一列都必须是检索列(或者有效的表达式,注意不能是聚集函数)。如果在SELECT中使用了检索列(或者表达式),则在Group By子句中使用相同的表达式,不能使用别名。
长度的数据类型(如文本,text类型)。
(4)除聚集计算语句外,SELECT语句中的每一列都必须在Group By中给出。
(5)如果分组列中包含具有Null值的行,则Null将作为一个分组返回,如果列中有多行Null,他们将作为一个分组返回。
(6)Group By必须出现在Where子句之后,Order By子句之前。
(7)如果在Group By子句中嵌套了分组,数据将在最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(不能从个别的列中取回数据)。
相关文章推荐
- mysql 删除重复数据保留一条
- MySQL基础教程4 —— 数据类型之存储需求及如何选择正确的类型
- mysql查找重复数据并只保留最大最小数据
- 【mysql】删除重复数据只保留一条
- mysql group by获取第一组数据
- mysql 删除表中重复的数据,只保留一条
- 在mysql中使用group by和order by取每个分组中日期最大一行数据
- mysql 删除重复数据,只保留最新一条
- mysql更改已有数据表的字符集,保留原有数据内容
- mysql中的不显示重复数据--group by
- mysql中group by分组后查询无数据补0;
- Mysql 中各类型数据的的存储需求
- mysql删除重复记录只保留一条数据
- mysql-删除重复的数据,重复的数据只保留一条
- mysql查找重复行且按某种条件保留数据
- Mysql数据分组GROUP BY 和HAVING,与WHERE组合使用
- MySQL 表中多个字段重复只保留一条数据
- mysql删除重复数据,并保留一条
- mysql将普通索引更改为唯一索引,且对重复的数据只保留一条
- MySQL字段数据全部查出【只保留中文、英文、数字、空格的词表】