mysql去重取最大值,逻辑类似oracle的over(partition by)函数
像下表一样的数据,有重复的合同号,但是我只想保留同一合同号中回款金额最大的那一行,也就是图中红框里的数据。
oracle方法:
在oracle中,我们可以简单地用over(partition by)函数处理(代码示例如下),解释一下就是利用partition by函数按照合同号分区,在每个分区内再利用order by根据回款金额排序,where num=1的意思就是取每个分区中排序第一的那一行。
select
row_number()over(partition by 合同号 order by 回款金额 desc) as num
from test where num=1
mysql方法:
但是在mysql中并没有这样的函数,我们需要重新写逻辑(代码如下),老规矩解释一下:第二个select函数是关键所在,功能就是,当a.`合同号` = b.`合同号`时,我们取出最大的回款金额,当a.`回款金额`等于这个最大的回款金额时,我们认为这一行符合条件并取出,因此a中的每个合同号我们都要执行一次第二个select函数,来判断当前合同号的这一行是否是最大回款金额的这一行。
SELECT a.`合同号`, a.姓名, a.`回款金额`
FROM test a WHERE a.`回款金额` =
(SELECT MAX(b.`回款金额`) FROM test b WHERE a.`合同号` = b.`合同号`);
运行结果:
去重取最小值:
如果是去重取最小值,那么代码如下,简单地说就是oracle【改升序为降序】,mysql【改最大值为最小值】。
#oracle
select
row_number()over(partition by 回款金额 order by 回款金额 ASC) as num
from test
#mysql
SELECT a.`合同号`, a.姓名, a.`回款金额`
FROM test a WHERE a.`回款金额` =
(SELECT MIN(b.`回款金额`) FROM test b WHERE a.`合同号` = b.`合同号`);
mysql去重取最大值,逻辑类似oracle的over(partition by)函数相关推荐
- mysql 去重取最大值_mysql去重取最大值,逻辑类似oracle的over(partition by)函数
像下表一样的数据,有重复的合同号,但是我只想保留同一合同号中回款金额最大的那一行,也就是图中红框里的数据. oracle方法: 在oracle中,我们可以简单地用over(partition by)函 ...
- 【mysql】使用变量实现类似oracle中lag函数功能
mysql使用变量实现类似oracle中的lag函数功能 说明: 有一个订单表,每次下单都会记录是否使用了券,现模拟一个需求,将订单表插入日志表达到记录用户上一次是否用券以及此订单是否用券的情况 #- ...
- MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK
原文地址:http://it.dataguru.cn/article-3352-1.html 摘要: 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来 ...
- MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK.
http://www.kankanews.com/ICkengine/archives/31891.shtml 1 引擎说明 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FE ...
- Oracle取排序的第五条数据,OVER(PARTITION BY)函数介绍 【oracle中按A分组按B排序,再取B中第一条数据的查询】...
目录 一.小案例: school表中有①id 序号②class 班级 ③score成绩 三个字段, 使用oracle实现按照班级分区,然后取班级中的第一名. 1.1测试数据如下: --创建学校表sch ...
- mysql 一行取最大值_mysql 分组取最大值的同时获取包含最大值的行的其他字段
假设有表如下: +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 000 ...
- Mysql间隔取数据,实现sqlserver的row_number()函数
1. 使用临时表 CREATE DEFINER=`root`@`%` PROCEDURE `sp_getMonitorInfo`(IN d_itemId INT, IN d_configId INT, ...
- 【Excel函数】隔行取数并取最大值
Excel数据处理 1 隔行取数 1.1 隔行取数后取最大值 1 隔行取数 问题:Excel中每隔10个数取一个值. 方法:OFFSET或INDEX函数. OFFSET(reference;rows; ...
- MySQL组内排序取最大值
最近业务反馈一个查询异常的问题,需要DBA对查询结果异常给出解释,并帮助他们解决该问题.问题本质是一个组内排序取最大值的问题,根据业务需求,我构建了测试用例 测试用例 --建表 create tabl ...
最新文章
- dlib 获取人脸姿态 6个关键点
- Linux命令速查(带参数说明)
- 学习MiniGui之多线程机制【转】
- php5框架,Thinkphp5.1框架
- MySQL事务学习总结
- 冰河木马使用(纯属学习)
- Win7 32 不能安装STM32 虚拟串口驱动解决方法
- “匠心之韵,数据之美”之数字营销专访【友盟+】一周年:不忘初心,从整合到融合,从合并到合力...
- 开源无国界,从openEuler Maintainer到Spark Committer的贡献开源之路
- 利用第三方服务平台实现简单的短信验证功能
- 三八节送什么礼物好?最适合送礼的无线蓝牙耳机品牌排名
- 【CS231n】五、卷积神经网络简介CNN学习笔记_一只神秘的大金毛_新浪博客
- 怎么用视频转换器把mp4转换成mp3
- 【pycharm和anaconda安装教程】
- ise生成msk文件的用处_cmsis-posmsk-codegen-为寄存器生成Pos和Msk定义的小型实用程序,特别是对于CMSIS项目-Mete Balci...
- 荔枝nano开启RNDIS驱动,无需补丁。
- android--获取手机的IMSI码,并判断是中国移动\中国联通\中国电信
- android 弹球游戏
- MATLAB 2017a编译gpb代码
- 微信小程序自定义组件标签