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 。
新增两列,将从后往前和从前往后的频数相加,两个数都需要大于等于总数一半,再取平均。
# MySQL SELECT ROUND(AVG(number),1) 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)
上一题:569. 员工薪水中位数