目录

  • 一、题目
  • 二、解决
    • 1、sum() over() + avg()
    • 2、join
  • 三、参考

一、题目

Numbers 表:

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

中位数 是将数据样本中半数较高值和半数较低值分隔开的值。
编写一个 SQL 查询,解压 Numbers 表,报告数据库中所有数字的 中位数 。结果四舍五入至 一位小数 。

查询结果如下例所示。

示例:

输入:
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 。

二、解决

1、sum() over() + avg()

思路:

筛选条件是 desc_frequency >= total_frequency / 2 and asc_frequency >= total_frequency / 2 , desc_frequency 的一半就是中位数

通过筛选条件查询出来的 num 就是中位数,使用 avg 对其求平均数,因为如果是偶数个的话,查出来的中位数是两个。

代码:

select avg(num) as median from (selectnum,sum(frequency) over() total_frequency,sum(frequency) over(order by num desc) desc_frequency,sum(frequency) over(order by num asc) asc_frequencyfrom numbers
) as temp
where desc_frequency >= total_frequency / 2
and asc_frequency >= total_frequency / 2;

2、join

思路:

if(n1.num >= n2.num, n2.frequency, 0) ,第二个参数使用 n2.frequency 是因为按照 n1.num 进行分组的,再使用 sum() 计算 (n1.num )比 n2.num 大的 n2.frequency

  • n1.num = 0 >= n2.num = 0 ,只会计算 num=0 的 n2.frequency
  • n1.num = 1 ,符合条件的有 n2.num = 0, n2.num = 1 ,就会计算 0 和 1 的 n2.frequency

if(n1.num >= n2.num, n2.frequency, 0) 也是同样流程。

代码:

select avg(num) as median
from
(select n1.num from numbers n1 join numbers n2 group by n1.numhaving sum(if(n1.num >= n2.num, n2.frequency, 0)) >= sum(n2.frequency) / 2and sum(if(n1.num <= n2.num, n2.frequency, 0)) >= sum(n2.frequency) / 2
) as temp;

三、参考

1、详解给定数字的频率查询中位数(三种方法)
2、sum over (order by )

【LeetCode-SQL】571. 给定数字的频率查询中位数相关推荐

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

    文章目录 1. 题目 2. 解题 1. 题目 Numbers 表保存数字的值及其频率. +----------+-------------+ | Number | Frequency | +----- ...

  2. Mysql练习题15-给定数字的频率查询中位数

    需求:编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息: FirstName, LastName, City, State 展示效 ...

  3. LeetCode 2161. 根据给定数字划分数组

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 pivot . 请你将 nums 重新排列,使得以下条件均成立: 所有小于 pivot 的元素都 ...

  4. mysql查询id为偶数_MySQL中查询中位数?

    导读:计算中位数可能是小学的内容,然而在数据库查询中实现却并不是一件容易的事.我们今天就来看看都有哪些方法可以实现. 注:本文所用MySQL版本无限制,所列题目均来源于LeetCode. LeetCo ...

  5. mysql查找有小数点的数据_MySQL中查询中位数?

    导读:计算中位数可能是小学的内容,然而在数据库查询中实现却并不是一件容易的事.我们今天就来看看都有哪些方法可以实现. 注:本文所用MySQL版本无限制,所列题目均来源于LeetCode. LeetCo ...

  6. MySQL中查询中位数?

    导读 计算中位数可能是小学的内容,然而在数据库查询中实现却并不是一件容易的事.我们今天就来看看都有哪些方法可以实现. 注:本文所用MySQL版本无限制,所列题目均来源于LeetCode. LeetCo ...

  7. 5186. 区间内查询数字的频率

    5186. 区间内查询数字的频率 请你设计一个数据结构,它能求出给定子数组内一个给定值的 频率 . 子数组中一个值的 频率 指的是这个子数组中这个值的出现次数. 请你实现 RangeFreqQuery ...

  8. LeetCode(SQL)难度-中等

    LeetCode(SQL)难度-中等 注:排名知识点(题目1->思路来源于牛客-小数志(公众号)) 连续排名,例如3000,2000,2000,1000排名结果为1-2-3-4,体现同薪不同名, ...

  9. SQL必知必会1 查询部分 P1-P129

    第1课 了解SQL 这一课程介绍SQL究竟是什么,它能做什么事情 1.1 数据库基础 你正在读这本SQL图书,表明你需要以某种方式与数据库打交道.SQL正是用来实现这一任务的语言,因此在学习SQL之前 ...

最新文章

  1. 二维数组练习--矩阵的加法和乘法
  2. 同一张表两方各字段相同_SQL高级知识——派生表
  3. Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常
  4. IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合
  5. 2021暑假每日一题 【week9 完结】
  6. java 当前时间的前一天_java获取当前日期的前一天和后一天
  7. 【WebRTC---序篇】(二)Windows平台WebRTC源码编译
  8. linux下mono的安装与卸载
  9. 【转】3.4(译)构建Async同步基元,Part 4 AsyncBarrier
  10. java企业人事管理系统源码_企业人事管理系统完美版源代码 - 源码下载|行业应用软件|企业管理(财务/ERP/EIP等)|源代码 - 源码中国...
  11. 诗与远方:无题(四十三)- 幼稚肤浅
  12. 请假系统特例规则详细设计
  13. 免费下载全球SRTM高程数据(hgt格式)
  14. python 已知三条边求三角形的角度
  15. 服务器IP被封的原因
  16. 阿里云香港服务器配置选择帮助文档(超详细)
  17. oracle ip on_logon_trigger,透过Trigger监控Logon和Logoff
  18. JS打开模态窗口showModalDialog
  19. web(World Wide Web)
  20. android 群英传笔记,Android 群英传读书笔记1

热门文章

  1. 利用Python进行破解哔哩哔哩登录
  2. Linux-Ubuntu下如何查看笔记本PC型号
  3. 全网最新超详细的【Axure】Axure RP 10的下载、安装、中文字体、授权【2023年】
  4. Hadoop生态圈技术概述
  5. Android模仿微信录制小视频
  6. Mybatis使用介绍
  7. 【商城应用】类余额宝功能体系设计
  8. linux如何安装卸载.bin文件
  9. html页面整体变灰,CSS + JS 网站变灰(变黑白),兼容所有浏览器。
  10. 运动耳机排行榜,六款运动耳机值得推荐