group by按需求保留数据——mysql

在使用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子句中嵌套了分组,数据将在最后指定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(不能从个别的列中取回数据)。

MySQL中的group by语句可以带有多个参数,用于根据这些参数对数据进行分组。当group by带有两个或多个参数时,参数全部相同的数据会归为一类。可以使用count()函数统计每一类的数据量,括号中可以使用任意一个参数。同时,可以使用having子句筛选出其中重复量大于1的数据[2]。 举个例子,假设有一个表t1,SQL语句如下: SELECT c1, SUM(c2) FROM t1 WHERE c1 in (1,2) GROUP BY c1 这个语句的含义是,根据c1的进行分组,然后计算每一组中c2列的总和[3]。 在这个例子中,如果c1的为1的数据有5行,c2的为2的数据有3行,c1的为2的数据有4行,那么这个语句的结果将返回两行数据,分别是(1, 总和)和(2, 总和)。 因此,group by多参数可以用来对数据进行分类和汇总操作,方便我们进行数据分析和统计。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL group by是如何使用索引的?](https://blog.csdn.net/yasinshaw/article/details/125039106)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [mysql根据多字段分组——group by带两个或多个参数](https://blog.csdn.net/qq_43722079/article/details/123865494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值