亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

數據庫有哪些提取前百分之N的記錄的方法

發布時間:2021-10-09 17:45:50 來源:億速云 閱讀:292 作者:iii 欄目:數據庫

這篇文章主要講解了“數據庫有哪些提取前百分之N的記錄的方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“數據庫有哪些提取前百分之N的記錄的方法”吧!

數據庫有哪些提取前百分之N的記錄的方法

這個需求在SQL Server和Oracle上都很容易實現,甚至是在MySQL 8.0也很容易實現,只是恰好我們業務數據庫是MySQL 5.7

先給大家介紹下不同數據庫平臺的實現方法。

SQL Server實現方法

SQL Server上有個TOP Percent的方法可以直接取結果的前(或后)百分之N例如有如下一張City表

數據庫有哪些提取前百分之N的記錄的方法

我們取前10%的數據記錄可以這樣寫:

SELECT  TOP 10 PERCENT   * FROM City ORDER BY ID DESC

結果如下:

數據庫有哪些提取前百分之N的記錄的方法

Oracle實現方法

Oracle有個ROWNUM偽列可以用來幫助我們計算前百分之N。ROWNUM偽列的特點:

  • ROWNUM是按照記錄插入時的順序排序的

  • ROWNUM并不實際存在,是對篩選后的結果集的一個排序,如果不存在結果集就不會有ROWNUM

  • ROWNUM不能用基表名作為前綴

  • 在使用ROWNUM進行查詢時,請注意:

1)若使用大于號(>),則只能使用(>0),其他均不可以 2)若使用小于號(<),同一般情況  3)若使用等于號(=),則只能使用等于1(=1)我們可以先計算出整個表的記錄行數量

SELECT COUNT(*) CNT FROM City

然后根據count聚合查詢總條數乘以百分比,來確定要查詢的條數

SELECT 0.1*COUNT(*) CNT FROM City

最后取出偽列小于共有數據的百分比的數據

SELECT * FROM CITY WHERE ID IN ( SELECT ID FROM  ( SELECT ID FROM CITY ORDER BY ID DESC ) WHERE ROWNUM < (SELECT COUNT(*)*0.1 FROM CITY) )

注意:Oracle不支持子查詢內ORDER BY,需要在外面再嵌套一層。

MySQL 8.0的實現方法

MySQL 8.0的實現方法主要是借助窗口函數ROW_NUMBER()  OVER()。其實就是給排好序的集合添加一個自增長列,與Oracle的ROWNUM有點類似

SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY ID DESC) rn FROM  City ORDER BY ID DESC ) a WHERE a.rn<=(SELECT 0.1*COUNT(*) FROM City)

MySQL 5.X的實現方法

我們知道MySQL 5.X是沒有開窗函數ROW_NUMBER() OVER()的,那該如何實現呢?

這里我們需要借助變量來實現,其實思路還是創建一個自增長列,只是方法不同。

SELECT    A.*,   @row_num:=@row_num+1 AS ROW_NUM FROM    City A , (SELECT @row_num:=0) B ORDER BY ID DESC

這樣我們就可以得到一張有自增長列的結果集了,接下來還是按照上面類似的方法,取前10%即可。

SELECT * FROM ( SELECT    A.*,   @row_num:=@row_num+1 AS ROW_NUM FROM    City A , (SELECT @row_num:=0) B ORDER BY ID DESC ) C WHERE C.ROW_NUM<=(@row_num*0.1)

其實MySQL 5.X也挺簡單的,只是當時不怎么想用變量,想看看有沒有其他辦法,最后發現還是得用變量

感謝各位的閱讀,以上就是“數據庫有哪些提取前百分之N的記錄的方法”的內容了,經過本文的學習后,相信大家對數據庫有哪些提取前百分之N的記錄的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

榆林市| 满洲里市| 来凤县| 庆安县| 鹤山市| 石家庄市| 图们市| 古田县| 阳信县| 军事| 天祝| 锦屏县| 房山区| 香港| 莫力| 虹口区| 黑龙江省| 邵阳市| 安龙县| 宁津县| 安新县| 桦甸市| 海盐县| 莱芜市| 吉安县| 桂阳县| 咸丰县| 满洲里市| 保山市| 乌恰县| 鄯善县| 泽库县| 海口市| 潍坊市| 达拉特旗| 内乡县| 固安县| 新郑市| 阳原县| 确山县| 朝阳区|