针对"按某一字段分组取最大(小)值所在行的数据"一文的深入讨论和研究

Python中获取指定分组内字段的最大值 在Python编程中,有时我们需要在数据集的特定分组中找到某个字段的最大值。为了实现这个目标,我们可以使用Python中的pandas库。pandas是一个功能强大的数据分析工具,它提供了广泛的功能来处理和操作数据。函数,我们可以轻松地在Python中获取指定分组内字段的最大值。首先,让我们假设我们有一个包含多个组的数据集,每个组都有一个字段来进行比较。函数来按班级对数据进行分组,并找到每个班级中分数的最大值。如您所见,我们成功地找到了每个班级中分数的最大值。函数,我们将数据集按班级分组,并使用。 阅读详情

前天, 看到"爱新觉罗.毓华"的一篇关于讨论SQL查询的帖子: 按某一字段分组取最大(小)值所在行的数据

这篇文章讨论了七个查询情况, 除了第7部分外内容外, 其余的介绍的比较详细.  我继续针对第7种查询进行深入的讨论.

我们首先来看一下我们需要研究的数据情况:

create   table  tb(name  varchar ( 10 ),val  int ,memo  varchar ( 20 ))
insert   into  tb  values ( ' a ' ,     2 ,    ' a2(a的第二个值) ' )
insert   into  tb  values ( ' a ' ,     1 ,    ' a1--a的第一个值 ' )
insert   into  tb  values ( ' a ' ,     1 ,    ' a1--a的第一个值 ' )
insert   into  tb  values ( ' a ' ,     3 ,    ' a3:a的第三个值 ' )
insert   into  tb  values ( ' a ' ,     3 ,    ' a3:a的第三个值 ' )
insert   into  tb  values ( ' b ' ,     1 ,    ' b1--b的第一个值 ' )
insert   into  tb  values ( ' b ' ,     3 ,    ' b3:b的第三个值 ' )
insert   into  tb  values ( ' b ' ,     2 ,    ' b2b2b2b2 ' )
insert   into  tb  values ( ' b ' ,     4 ,    ' b4b4 ' )
insert   into  tb  values ( ' b ' ,     5 ,    ' b5b5b5b5b5 ' )

我们首先再来确认一下我们要做什么事情. 只有在清楚我们需要做什么事情的情况下, 我们才能得到正确的结论. 我们要根据某一个字段(例如: name), 进行分组, 并在分组的基础上, 选出某列(例如: val)上的最值. 并最终返回name, val值在表tb中所有字段信息.

由于表tb上没有主键, 因此name, val, memo这个三元组, 不一定能从表tb中返回唯一的元组. 由于我们要根据name进行分组, 并选出val上的最值, 我们可以发现name, val的二元组, 也不一定从表tb中返回唯一的元组.

根据"爱新觉罗.毓华"设计的用例(testcase)来看, 并没有考虑当name, val相同时, memo不同时应该返回何种结果. 通过"爱新觉罗.毓华"给出的求解方案, 我们知道无论memo为何值, 利用临时表或row_number都只返回"第一个"元组.

我们已经确认了"爱新觉罗.毓华"这位朋友的文章中第七种问题的情况, 我们除了要完成"爱新觉罗.毓华"已经完成的操作(问题1). 还要实现一个能够对不同memo返回多条结果的SQL语句(问题2). 实际上问题2比问题1要容易得多.

针对问题1来说, "爱新觉罗.毓华"给出2种方法分别利用:

1. 临时表+自增列;

2. row_number函数;

我们是否还能给出第三种方法呢? 在继续讨论问题1之前, 我们先来解决问题2, 问题2更加简单. 我们首先追加一些数据:

insert   into  tb  values ( ' a ' ,     1 ,    ' 问题2 ADD BY Edengundam ' )
insert   into  tb  values ( ' b ' ,     1 ,    ' 问题2 ADD BY Edengundam ' )

我们只对a, b加上两条数据, 来补充一下测试用例(我们不再讨论NULL值问题).

我们首先根据name字段进行分组, 并取出val中最小值:

SELECT  name,  MIN (val)  AS  minval  FROM  tb  GROUP   BY  name;

输出结果:

name       minval
---------- -----------
a          1
b          1

(2 row(s) affected)

接下来, 我们只需要利用 "相关子查询" 或者 "JOIN" 来选出最小值对应的元组:

SELECT   DISTINCT  tb.name, tb.val, tb.memo
FROM
tb,
(
SELECT  name,  MIN (val)  AS  minval  FROM  tb  GROUP   BY  name)  AS  tmp
WHERE  tb.name  =  tmp.name  AND  tb.val  =  tmp.minval;

输出结果:

name       val         memo
---------- ----------- ----------------------------------------
a          1           a1--a的第一个值
a          1           问题2 ADD BY Edengundam
b          1           b1--b的第一个值
b          1           问题2 ADD BY Edengundam

(4 row(s) affected)

注意, 这里的DISTINCT用来将重复的a, 1, 'a1--a的第一个值'列消去. 现在我们已经完成了问题2, 下面我们需要思考如何能够不依赖临时表和row_number这类函数来针对不同的name, MIN(val)返回一条元组.

我们应该从tb表中选择出name, MIN(val)的列, 并且这一列的memo是通过TOP语句唯一选择的. 这就是我们的思路, 利用相关子查询, TOP语句:

SELECT   DISTINCT  tb.name, tb.val, tb.memo
FROM
tb,
(
SELECT  name,  MIN (val)  AS  minval  FROM  tb  GROUP   BY  name)  AS  tmp
WHERE  tb.name  =  tmp.name
    
AND  tb.val  =  tmp.minval
    
AND  tb.memo  =  ( SELECT   TOP   1  memo  FROM  tb  AS  d  WHERE  tb.name  =  d.name  AND  tb.val  =  d.val);

我们看看输出结果:

name       val         memo
---------- ----------- ----------------------------------------
a          1           a1--a的第一个值
b          1           b1--b的第一个值

(2 row(s) affected)

我们已经完成任务了, 但是我必须提醒大家效率上来说, 最好的是"爱新觉罗.毓华"利用row_number函数实现的办法. 我的讨论只是帮助大家开头思路, 并且将原有讨论情况进行扩充.

 

 

学生信息管理 选课管理系统 学生成绩管理 3张表 立即下载

相关推荐

从光斑图到锤形优化:一次搞定Zemax双胶合透镜的像散与场曲问题

本文详细解析了Zemax双胶合透镜设计中像散与场曲问题的诊断与优化方法。从光斑图分析到锤形优化技巧,提供了完整的光学设计实战指南,帮助设计师快速定位问题并有效改善系统性能,特别适合光学设计工程师和Zemax使用者参考。

weixin_27134495的博客 233

求分组中某个字段最大值

问题:表ANAME DATE COL1------------------------------A 2011/06/07 4A 2011/06/09 6A 2011/06/03 7B 2011/06/29 5B 2011/06/30 6求查询出每个NAME下的日期最大的结果NA

xiaodejun5241的专栏 767

自监督学习与上下文赌博机融合:视觉决策中的协同优化与实战指南

在机器学习领域,自监督学习(Self-Supervised Learning)通过设计前置任务从无标注数据中学习通用表征,已成为解决标注数据稀缺问题的关键技术。其核心原理是利用数据自身的结构生成监督信号,训练编码器提取鲁棒特征。上下文赌博机(Contextual Bandits)作为强化学习的简化分支,专注于在给定上下文信息下做出单步最优决策,平衡探索与利用,广泛应用于推荐系统、广告投放等场景。将两者结合,构建端到端的协同训练框架,能让视觉表征的优化直接服务于最终的决策目标,同时利用自监督任务作为正则化项提

weixin_33721344的博客 520

Dax实现动态分组的统计

Dax轻松实现动态ABC打标,灵活分析

qq_33909788的博客 2090

整车 EOL下线 测试系统介绍

整车下线(EOL)测试专门针对整车进行设计开发,是车企将组装好的整车交付客户前的 最后一道检测工序。EOL 测试针对的是整车下线测试,不同于零部件下线,是整车级别的下线 测试,测试过程关系整车的每个零部件,其测试质量直接影响到整车的质量好坏。因此,整车EOL测试是整车下线必不可少的测试过程.

王小奎的博客 5487

昇腾Ascend310b部署deepseek-r1-7b的学习记录

9.鲲鹏服务器+昇腾卡(Atlas 300I pro)搭建DeepSeek-R1-Distill-Qwen-7B(自己存档详细版)5.如何使用昇腾Ascend 300I Pro 310P芯片 单卡运行DeepSeek-R1-Distilled-Qwen-7B。6.鲲鹏服务器+昇腾卡(Atlas 300I pro)搭建DeepSeek-R1-Distill-Qwen-7B。7.鲲鹏+昇腾部署DeepSeek-R1-Distill-Qwen-32B+Open-webui。

maken 2373

按某一字段分组取最大(小)值所在行的数据

--按某一字段分组取最大(小)值所在行的数据(爱新觉罗.毓华 2007-10-23于浙江杭州)/*数据如下:name val memoa    2   a2(a的第二个值)a    1   a1--a的第一个值a    3   a3:a的第三个值b    1   b1--b的第一个值b    3   b3:b的第三个值b    2   b2b2b2b2b    4   b4b4b    5   b

bqb的专栏 902

自动化专业与嵌入式

在学生时期,我是一个典型的学渣,所以只能选择电气工程、汽修、数控之类的专业。而那些高分的则可以选择计算机,电子商务,通信之类的。这些专业看起来像是蓝领和白领的分界,至今我都觉得这种制度是不人性化的。专业这块根据学生的爱好去选择是最好的,毕竟有兴趣才会”真心”去学习。谁说学渣就学不会编程、学不会金融对吧?不过也罢,在学校能学到东西的毕竟是少数,最近有些大学生发了他们的课程表给我看了下。我感觉学的太广了,什么单片机、c语言、java之类的,导致很多学生学完以后还是很迷茫,不知道自己专业到底是从事什么方向的。所以

m0_71017841的博客 3588

oracle 一张表中,按照字段分组,取得每一个分组下的另一个字段最大值,再按照最大值取另一个字段的最大值

表格例子: id version seq id1 1 3 id1 2 1 id1 2 2 id2 1 1 id2 1 2 问题描述: 将每一个id的最高版本的最高seq取得。 预想结果: 查询语句: SELECT /*3.显示表的查询结果(...

dongli5012的博客 1658

VTK API 详解(103):vtkGPUVolumeRayCastMapper - GPU加速体绘制

是 VTK 中基于 GPU 的高效体绘制映射器,利用现代显卡的计算能力,通过射线投射算法实现快速且高质量的三维体积渲染。相比 CPU 版本的,GPU 映射器性能大幅提升,支持更复杂的光照和渲染效果,是体绘制的主流选择。是 VTK 中性能优异的GPU体绘制映射器;适合大数据集和实时交互应用;配合灵活设置颜色、透明度和光照;建议在支持OpenGL的环境中使用。

yumeiguo的博客 295

AI: 机器学习的模型是如何训练的?(在试错中学习)

一句话理解机器学习一般训练过程 :通过有标签样本来调整(学习)并确定所有权重Weights和偏差Bias的理想值。 训练的目标:最小化损失函数 (损失函数下面马上会介绍) 机器学习算法在训练过程中,做的就是:检查多个样本并尝试找出可最大限度地减少损失的模型;目标就是将损失(Loss)最小化 在这里插入图片描述 上图就是一般模型训练的一般过程(试错过程),其中 模型: 将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型,如下公式

HowieXue 薛永浩的博客 3万+

SQL - 查询某一字段值相同而另一字段值最大的记录

有时需要以某一字段作为分组,筛选每一组的另一字段值最大(或最小)的记录。例如,有如下表 app,存储了 app 的 ID、名称、版本号等信息。现在要筛选出每个 app 版本最大的记录。 方法一 SELECT a.* FROM app a WHERE a.app_version = (SELECT MAX(b.app_version) FROM app b WHERE b.ap...

weixin_30301449的博客 1321

论deepseek软件底层原理

如处理医学文本时,将任务分配给擅长医学知识处理的专家,避免通用模块处理的低效性,极大提升计算效率与任务处理的针对性。教师模型复杂且强大,学生模型结构简单。协作处理:多模块协作时,建立数据流通与交互机制,各模块按顺序或并行处理数据,不断传递与更新中间结果,共同完成复杂任务。(一)输入处理与任务判断 输入预处理:接收输入数据,如用户文本提问,首先进行清洗,去除噪声数据、特殊字符等。任务分类:通过MoE架构“路由器”,依据输入数据特征,判断任务所属领域与类型,如文本分类、情感分析等,为后续处理模块选择提供依据。

欢乐打代码! 2738

mysql每天取一条_Mysql 取分组后时间最大的一整条数据 及一些分组后取出每天最大时间一条...

SELECT * FROM(SELECT t2.*, t1.Id as t1idFROM table t1LEFT JOIN table t2 ON tl.Id = t2.t1id-- ORDER BY t2.time DESC DESCHAVING 1 ORDER BYt2.time DESC) tGROUP BY t.t1id这种是正确的 这里需要用having 后再 order b...

weixin_28934777的博客 1582

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

分组取最值那条记录的id

需求分析(oracle中) 不知道各位小伙伴有没有这种需求,就是想获取一下某某某的最新消息。这句话的意思就是先根据userid分组,然后取时间的最大值,那么这样一来,我们就只能取到userid和时间两个字段,并不能取到最新这条记录的id,也就是最新这条记录的其他字段我们没法取到(如果我们要查询其他字段就必须一起分组,那样就会存在一个userid多条记录,那就不是最新的消息了)。。。。那么怎么办呢...

一只仰望天空的菜鸟 3107

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Mysql 如何分组查询取最新的几种方案

1.row_number函数 (mysql8支持) 2.子查询 3.临时表 4.新增字段标识

weixin_39120210的博客 5559

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

按时段分组_Excel表格数据透视表如何分组显示,不会的还不点进来看看

Hello,大家好,我是Excel从零到一,最近有几个粉丝私信问我如何让数据透视表分段显示,于是就跟他们说了下数据透视表中组合的内容,今天也来跟大家分享下组合功能主要针对的是数据透视表中的列字段以及行字段,筛选字段与值字段是无法进行分组的一、对数据进行分组首先我们需要插入一个数据透视表,我们将年龄拖动到行字段,将部门拖动到值字段显示如下效果然后在数据区域的行标签上单击一下右键可以看到分组,如下图标...

weixin_42498006的博客 3746

oracle数据库分组后取每组最大值

项目组使用oracle数据库,现在有如下的数据,数据库表名称为TEST: 现在想取按照集团分组后,取出最新时间的那一行数据,也就是想取如下标记的数据集合: 解决方法: SELECT a."ID",a."BUMENG_ID",a."GONGSI_ID",a."TIME" FROM (SELECT ROW_NUMBER() OVER(PARTITION BY GONGSI_ID ORDER BY TIME DESC) rn, TEST.* FROM TE

wujian_csdn_csdn的博客 9066

mysql分组取出每组地一条数据_基于mysql实现group by取各分组最新一条数据

基于mysql实现group by取各分组最新一条数据前言:group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢?本文提供两种实现方式。一、准备数据二、三种实现方式1)先order by之后再分组:SELECT * FROM (SELECT * from tb_dept ORDER BY id descLIMIT 10000) a GROUP BY...

weixin_39831039的博客 4966

awk分组求和分组统计次数

分组求和 1 awk '{s[$1] += $2}END{ for(i in s){print i, s[i] } }' file1 > file2 以第一列 为变量名第一列为变量,将相同第一列的第二列数据进行累加打印出和. 1 awk '{s[$1" "$2] += $3}END...

weixin_33910460的博客 6658

sql分组取出每组最大一条_SQL求职面试题类型总结

练习数据基于此前创建的student、score、course和teacher四张表。牢记SQL查询时语句的执行顺序,一般select字段最后执行,后续语句则是根据从哪查询以及筛选条件来按序执行;但group by、order by、limit则是对select后字段进行排序选择。---- 分析问题时可对应下面语句结构填充对应查询目标select 查询结果 from 从哪里查询 where 查询条...

weixin_39623671的博客 2046

mysql先排序后分组取最大值_先分组查询,然后为每组数据排序,取出最大值

分组查询并查询出每组中的最大值现有如左图的一个数据集合,要求:以anchor字段分组,并且将每组中的最大值查询出来。/*LED数据查询:先分组查询,然后为每组数据排序,取出最大值要点:row_number() OVER (PARTITION BY RealOperateAnchor ORDER BY count(*) DESC) rank将数据按照RealOperateAnchor分组,并按照co...

weixin_39621669的博客 828

sql分组以后获取月份最大的或者最新记录的数据

sql分组获取最新数据

weixin_45650629的博客 3354

使用mysql语句进行分组查询

使用mysql语句进行分组查询

SSS4362的博客 6421

Elasticsearch分组取最新或者最大一条记录的聚合

聚合agg,top_hits讲解。取分组满足某一条件的结果集

qq_39798275的博客 5998
上一篇: 怎么又不能插入代码了...
下一篇: PowerShell官方的命令命名规则
PowerShell
博客等级 码龄19年 103粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值