SQL,力扣题目571, 给定数字的频率查询中位数

news/2024/11/8 13:43:07/

一、力扣链接

LeetCode_571

二、题目描述

Numbers 表:

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

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

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

三、目标拆解

四、建表语句

Create table If Not Exists Numbers (num int, frequency int)
Truncate table Numbers
insert into Numbers (num, frequency) values ('0', '7')
insert into Numbers (num, frequency) values ('1', '1')
insert into Numbers (num, frequency) values ('2', '3')
insert into Numbers (num, frequency) values ('3', '1')

五、过程分析

1、为求中位数做准备,按num排序,找出中间的频率值对应的num

2、num个数为偶数或奇数情况下分析中位数的取值

六、代码实现

with t1 as(
select num, frequency,sum(frequency) over() total_cnt,sum(frequency) over(order by num) acc
from numbers
order by num
)
# select * from t1;
,t2 as(selectt1.*,total_cnt%2 _mod,total_cnt/2 even1,total_cnt/2 + 1 even2,(total_cnt + 1)/2 odd,lag(acc) over(order by acc) lag_acc,lead(acc) over(order by acc) lead_accfrom t1
)
-- 分析重点
select round(avg(casewhen _mod = 0 and lag_acc is null and even1 <= acc then num  -- 频率累计值前面的值为空when _mod = 0 and lag_acc is null and even2 <= acc then num  -- 需要<=当前频率累计值when _mod = 1 and lag_acc is null and odd <= acc then numwhen _mod = 0 and lead_acc is null and even1 > lag_acc then num  -- 频率累计值后面的值为空when _mod = 0 and lead_acc is null and even2 > lag_acc then numwhen _mod = 1 and lead_acc is null and odd > lag_acc then numwhen _mod = 0 and (even1 > lag_acc and even1 <= acc) then numwhen _mod = 0 and (even2 > lag_acc and even2 <= acc) then numwhen _mod = 1 and (odd > lag_acc and odd <= acc) then num end), 1)  median
from t2;

七、结果验证

八、小结

1、CTE表达式 + 移动窗口 + 场景分析 + 中位数算法

2、分析多种场景下的算法


http://www.ppmy.cn/news/1545364.html

相关文章

SpringBoot框架的企业资产管理自动化

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了企业资产管理系统的开发全过程。通过分析企业资产管理系统方面的不足&#xff0c;创建了一个计算机管理企业资产管理系统的方案。文章介绍了企业资产管理系统的系…

规范:项目、目录、文件、样式、事件、变量、方法、url参数、注释、git提交 命名规范及考证

一、规范命名的重要性 易懂、通用、规范、标准、专业性、是经验积累的体现 1.1、常见命名方法 序号命名方法解释1全小写2全大写3驼峰&#xff1a;小驼峰命名法4驼峰&#xff1a;大驼峰命名法5烤串命名法 / 脊柱命名法6下划线分隔法 二、项目名 采用小写字母和中划线&#…

GitHub | 发布到GitHub仓库并联文件夹的方式

推送到Github 推送步骤如果你只想更新单个文件&#xff0c;只需在第 4 步中指定该文件的路径即可。可能问题一 效果 推送步骤 更新 GitHub 仓库中的文件通常涉及以下步骤&#xff1a; 克隆仓库&#xff1a; 首先&#xff0c;你需要将 GitHub 上的仓库克隆到本地。使用 git …

在OceanBase 中,实现自增列的4种方法

本文作者&#xff1a;杨敬博&#xff0c;爱可生 DBA 团队成员。 背景描述 在OceanBase数据库中&#xff0c;存在MySQL租户与Oracle租户两种模式&#xff0c;本文主要讲解在 OceanBase 的Oracle模式&#xff08;以下简称OB Oracle&#xff09;&#xff0c;创建自增列的4种方式&…

【SQL实验】高级查询(难点.三)含附加数据库操作

完整代码在文章末尾【代码是自己的解答&#xff0c;并非标准答案&#xff0c;也有可能写错&#xff0c;文中可能会有不准确或待完善之处&#xff0c;恳请各位读者不吝批评指正&#xff0c;共同促进学习交流】 将素材中的“学生管理”数据库附加到SQL SERVER中&#xff0c;完成以…

Huffman(哈夫曼)编码(贪心)(笔记)

最优编码问题&#xff1a; 给出n个字符的频率ci&#xff0c;给每个字符赋予一个01编码串&#xff0c;使得任意一个字符的编码不是另一个字符的前缀&#xff08;这个称为前缀码&#xff09;&#xff0c;而且编码后的总长度&#xff08;每个字符的频率与编码长度乘积的总和&…

1.每日SQL----2024/11/7

题目&#xff1a; 计算用户次日留存率,即用户第二天继续登录的概率 表&#xff1a; iddevice_iddate121382024-05-03232142024-05-09332142024-06-15465432024-08-13523152024-08-13623152024-08-14723152024-08-15832142024-05-09932142024-08-151065432024-08-131123152024-…

ChatGPT的多面手:日常办公、论文写作与深度学习的结合

ChatGPT&#xff0c;由OpenAI精心打造的大型语言模型&#xff0c;依托于先进的人工神经网络技术&#xff0c;展现了在理解和生成自然语言文本方面的强大能力。该模型的核心设计宗旨是通过对话式交互&#xff0c;为用户带来前所未有的体验&#xff0c;无论是提供信息、答疑解惑&…