91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

武陟县| 芒康县| 芜湖县| 洛扎县| 华池县| 合作市| 肇庆市| 沭阳县| 商都县| 兴隆县| 阳东县| 九台市| 安西县| 荆门市| 英超| 巢湖市| 邮箱| 仪征市| 壤塘县| 九龙城区| 咸宁市| 临西县| 栖霞市| 堆龙德庆县| 广水市| 扬州市| 宜丰县| 新昌县| 上饶县| 北票市| 穆棱市| 怀来县| 青铜峡市| 天水市| 沈阳市| 台北县| 台南市| 恩平市| 尚义县| 聂拉木县| 仁化县|