返回介绍

solution / 0500-0599 / 0571.Find Median Given Frequency of Numbers / README

发布于 2024-06-17 01:03:59 字数 1793 浏览 0 评论 0 收藏 0

571. 给定数字的频率查询中位数

English Version

题目描述

Numbers 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| num     | int  |
| frequency   | int  |
+-------------+------+
num 是这张表的主键(具有唯一值的列)。
这张表的每一行表示某个数字在该数据库中的出现频率。

 

中位数 是将数据样本中半数较高值和半数较低值分隔开的值。

编写解决方案,解压 Numbers 表,报告数据库中所有数字的 中位数 。结果四舍五入至 一位小数

返回结果如下例所示。

 

示例 1:

输入: 
Numbers 表:
+-----+-----------+
| num | frequency |
+-----+-----------+
| 0   | 7     |
| 1   | 1     |
| 2   | 3     |
| 3   | 1     |
+-----+-----------+
输出:
+--------+
| median |
+--------+
| 0.0  |
+--------+
解释:
如果解压这个 Numbers 表,可以得到 [0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3] ,所以中位数是 (0 + 0) / 2 = 0 。

解法

方法一:开窗函数

# Write your MySQL query statement below
WITH
  t AS (
    SELECT
      *,
      SUM(frequency) OVER (ORDER BY num ASC) AS rk1,
      SUM(frequency) OVER (ORDER BY num DESC) AS rk2,
      SUM(frequency) OVER () AS s
    FROM Numbers
  )
SELECT
  ROUND(AVG(num), 1) AS median
FROM t
WHERE rk1 >= s / 2 AND rk2 >= s / 2;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文