【SQL】根据一个字段分组求另一个字段的最大值,并带出其他字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【SQL】根据一个字段分组求另一个字段的最大值,并带出其他字段相关的知识,希望对你有一定的参考价值。

参考技术A

表结构:

使用rank/rownumber/dense_rank函数做排序求出最大最小值,然后子查询查出排序第一的值。三个函数有区别。排序第一的聚合值有多个相同值的时候:rownumber会按照数据出现顺序取第一条值排序1,其他相同值顺延,rank会给相同值的都给出序列1,然后不会顺延序号,序号不连续。dense_rank与rank相同,都会给相同值给出序列1,但是会顺延序号,排序第二的会给出序号2,不同的话可以参考: https://www.cnblogs.com/heyang78/p/12684869.html

使用concat函数将分组字段和聚合字段拼接作为查询条件,但聚合字段有多个相同值的时候会带出多条。 eg:多个最大值

有其他好方法可以互相交流呀-。-

sql中根据表中一个字段分组分别统计每个分组的记录数

分组统计可以参考以下操作:

当数组重复的时候分组才有意义,因为一个人也可以分为一组,只是没有意义而已,分组采用GROUP BY语句完成,语法如下:

例子: 
按照部门编号分组,求出每个部门的人数,平均工资

按照职位分组,求出每个职位的最高和最低工资:

一旦分组之后,实际上对于语法上就会出现新的限制: 
分组函数可在没有分组的时候单独使用,却不能出现其他的查询字段:

ename就是其它查询字段。在select子句之后,只能出现分组的字段和统计函数,其它的字段不能出现

分组函数允许嵌套,但是嵌套之后的分组函数的查询之中不能再出现任何其它字段 
例子:按照职位分组,统计平均工资最高的工资

当添加其它字段‘job’之后出现错误

例子:查询出每个部门的名称、位置、部门的人数、平均工资 
确定所需的数据表: 
emp表:部门的人数,平均工资 
dept表:部门的名称,位置 
确定已知的关联字段: 
emp.deptno = dept.deptno 

发现dname存在重复,可以进行分组去除重复,按照之前对分组的理解,只要数据重复那么就有可能进行分组的查询操作,但是此时与之前的分组操作 不太一样,之前的分组是针对一张实体表进行分组的(emp,dept都属于实体表),但是对于以上的数据是通过查询结果显示的,所以是一张临时的虚拟表,但是不管是否是实体表还是虚拟表,只要是有重复,那么就直接进行分组

参考技术A select 字段,count(字段) from tablename group by 字段

本回答被提问者采纳

以上是关于【SQL】根据一个字段分组求另一个字段的最大值,并带出其他字段的主要内容,如果未能解决你的问题,请参考以下文章

请教一个sql(按2个字段分组然后从每组取出最大的一条纪录,再根据一个标记为判断是不是取出该值)

sql只根据某一字段去重,并保留其他字段

你好,,大哥,SQL如何根据一个字段的某个关键词的前面部分分组查询

SQL如何根据一个字段的某个关键词的前面部分分组查询

SQL(oracle) 取得分组后最大值记录

sql中根据表中一个字段分组分别统计每个分组的记录数