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

溫馨提示×

溫馨提示×

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

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

SQL怎么計算每個分組的中位數

發布時間:2022-01-15 16:24:33 來源:億速云 閱讀:347 作者:柒染 欄目:互聯網科技

這篇文章主要為大家分析了SQL怎么計算每個分組的中位數的相關知識點,內容詳細易懂,操作細節合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“SQL怎么計算每個分組的中位數”的知識吧。

中位數是指一組數據排序以后,位于中間位置的數據值。如果數據個數是奇數,中位數就是最中間位置那個值;如果是偶數,則是中間位置那兩個數的平均值。

怎么查詢出數據分組以后每個組的中位數呢?

用SQL來解決這個問題是很有難度的!

SQL的集合是無序的,沒有數據位置的概念,需要人為地造出行號,但是要對各分組獨立編行號也困難。后來在SQL2003標準中加入了窗口函數,可以對分組編行號了,但是求各組中位數依然繁瑣。

舉個例子:現有成績表SCORES數據如下,要求查出每科成績的中位數。

COURSESCORE
History68.5
History79.0
History82.5
History88.0
History93.5
Maths75.5
Maths83.0
Maths85.0
Maths95.5

查詢出來的各科成績中位數應該是:

COURSESCORE
History82.5
Maths84.0

以Oracle為例,用SQL寫出來是這樣:

WITH  A  AS 

       ( SELECT COURSE, SCORE,

              ROW_NUMBER()OVER ( PARTITION BY COURSE ORDER BY SCORE) AS RN,

              COUNT(*) OVER (PARTITION BY COURSE) AS CNT

       FROM SCORES ),

B  AS

       (SELECT * FROM A WHERE RN>(CNT-0.5)/2 AND RN<(CNT+2.5)/2 )

SELECT COURSE, AVG(SCORE) AS SCORE FROM B

GROUP BY COURSE

ORDER BY COURSE;

這里的A為每組數據加上組內行號并統計每組記錄數,B查出位于每組中間位置的記錄,最后從B里算出每組平均值,即為中位數。解題步驟比較多,這種SQL不好寫。另外還有不用窗口函數的辦法,語句就更加復雜了,這里不再列出。

集算器的SPL語言支持組內運算,也提供了中位數函數,解決這個問題就會簡單很多,只需1行代碼:

connect("mydb").query("select * from scores order by course, score").group(COURSE).new(~.COURSE,~.(SCORE).median():SCORE)

關于“SQL怎么計算每個分組的中位數”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!

向AI問一下細節

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

sql
AI

巴林右旗| 北流市| 宣汉县| 阳城县| 淮安市| 乌拉特前旗| 铁岭市| 伽师县| 全南县| 延寿县| 高陵县| 桦甸市| 岑溪市| 叶城县| 游戏| 东明县| 蓬安县| 九江县| 梅州市| 靖边县| 临漳县| 孙吴县| 固镇县| 绥阳县| 理塘县| 株洲市| 云梦县| 界首市| 忻州市| 灵寿县| 广元市| 招远市| 新源县| 宜昌市| 吴桥县| 湖南省| 沈丘县| 台北县| 广州市| 新巴尔虎右旗| 阿瓦提县|