中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在交易數據中查詢各個版本交易量前三的股票?(MySQL分

發布時間:2020-04-28 21:30:21 來源:網絡 閱讀:348 作者:layveen 欄目:MySQL數據庫

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分

實現MySQL rownum() over()之前,需要先了解下這種實現方式的思想:根據分組列排序后,定義rownum標記,rownum的標記隨著分組列變化而變化,分組列值相同時,rownum不變,最后每個分組列形成一個rownum序列,之后根據rownum序列篩選排名。

  1. 定義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開始賦值。
查詢結果:
如何在交易數據中查詢各個版本交易量前三的股票?(MySQL分

如何在交易數據中查詢各個版本交易量前三的股票?(MySQL分

可以看到,不同的tradeIndex,對應rownum序列都是獨立。

  1. 根據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分

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商都县| 海盐县| 宜宾县| 奉节县| 临猗县| 泊头市| 札达县| 潞西市| 博爱县| 平舆县| 苗栗县| 石河子市| 勃利县| 杨浦区| 甘肃省| 长寿区| 柘城县| 宁陕县| 法库县| 兴山县| 莒南县| 西林县| 沾益县| 施秉县| 马关县| 沙雅县| 越西县| 郁南县| 永新县| 长海县| 和政县| 韶关市| 梓潼县| 黎平县| 沂水县| 公主岭市| 伊春市| 宣威市| 航空| 紫阳县| 保德县|