如何在交易数据中查询各个版本交易量前三的股票?(MySQL分组排名)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在交易数据中查询各个版本交易量前三的股票?(MySQL分组排名),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2085字,纯文字阅读大概需要3分钟。
内容图文
SQL查询中,根据列A分组,分组后针对列B执行统计函数,是一件常用也很重要功能,如select T.a, max(T.b) from T order by T.a asc, T.b desc group by T.a
select T.a, count(T.b) from T order by T.a asc, T.b desc group by T.a
一直这样写SQL,直到有一天,一个做股票的朋友(非IT人事)和我聊天,说他自己用Python整了点数据,想分析下每个版块成交量前三的股票,问我知不知道怎么用SQL查出来(这是一个分组排名取若干首级的需求)。老实说,这个问题很常见,但是脑子刹那间有点懵逼,回来的路上一直想这个问题,若干年前用SQLServer时,有个分组方法ROW_NUMBER() OVER(),貌似可以实现这个分组排名功能。
语法格式:row_number() over(partition by 分组列 order by 排序列 desc)
与是网上搜了下MySQL 的实现,果然一堆朋友记录过。参照了一篇CSDN微博“Mysql实现ROW_NUMBER() OVER()” 的内容,将实现过程记录如下。
先看下表结构:
view_market_trade_amt有三列,第一列是指数,第二列是股票代码,第三列是成交量。
需求是将各个指数板块的成交前三的股票查出来。
实现MySQL rownum() over()之前,需要先了解下这种实现方式的思想:根据分组列排序后,定义rownum标记,rownum的标记随着分组列变化而变化,分组列值相同时,rownum不变,最后每个分组列形成一个rownum序列,之后根据rownum序列筛选排名。
- 定义rownum
select v.stockCode,v.tradeIndex,v.amount,
if(@grpvar=v.tradeIndex,@rownum:=@rownum+1,@rownum:=1) as rownum, @grpvar:=v.tradeIndex
from (select stockCode,tradeIndex,amount from view_market_trade_amt order by tradeIndex asc ,amount desc) v ,
(select @grpvar := null ,@rownum:=0) vardef
vardef是定义分组变量和rownum变量,分别默认赋值null和0;
grpvar赋值tradexIndex,同时判断当前记录的tradeIndex和该变量是否相等,如果相等则rownum+1,否则从1开始赋值。
查询结果:
可以看到,不同的tradeIndex,对应rownum序列都是独立。
- 根据rownum筛选记录
这一步就简单的多了,基于上面的继续,筛选出rownum小于3的即可。
select tradeIndex, stockCode, amount from (
select v.stockCode,v.tradeIndex,v.amount,
if(@grpvar=v.tradeIndex,@rownum:=@rownum+1,@rownum:=1) as rownum, @grpvar:=v.tradeIndex
from (select stockCode,tradeIndex,amount from view_market_trade_amt order by tradeIndex asc ,amount desc) v ,
(select @grpvar := null ,@rownum:=0) vardef
) as result
where result.rownum<=3
内容总结
以上是互联网集市为您收集整理的如何在交易数据中查询各个版本交易量前三的股票?(MySQL分组排名)全部内容,希望文章能够帮你解决如何在交易数据中查询各个版本交易量前三的股票?(MySQL分组排名)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。