MYSQL練習題:給定數字的頻率查詢中位數(Leetcode困難)

Avasla發表於2020-12-03

題目描述

Numbers 表儲存數字的值及其頻率。

+----------+-------------+
|  Number  |  Frequency  |
+----------+-------------|
|  0       |  7          |
|  1       |  1          |
|  2       |  3          |
|  3       |  1          |
+----------+-------------+
在此表中,數字為 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3,所以中位數是 (0 + 0) / 2 = 0+--------+
| median |
+--------|
| 0.0000 |
+--------+
請編寫一個查詢來查詢所有數字的中位數並將結果命名為 median 。

解題思路:

使用sum over(order by ) 對數字個數進行正序和逆序累計,

將從後往前和從前往後的頻數相加,兩個數都需要大於等於總數一半,再取平均。
在這裡插入圖片描述

select avg(number) median
from
    (select number,
        sum(frequency) over(order by number) asc_accumu,
        sum(frequency) over(order by number desc) desc_accumu
        from numbers) t1, 
    (select sum(frequency) total from numbers) t2
where asc_accumu >= total/2 and desc_accumu >=total/2

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/find-median-given-frequency-of-numbers
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

相關文章