力扣571(MySQL)-给定数字的频率查询中位数(困难)
题目:
Numbers 表保存数字的值及其频率。

在此表中,数字为 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3,所以中位数是 (0 + 0) / 2 = 0。

请编写一个查询来查找所有数字的中位数并将结果命名为 median 。
解题思路:
可以借助之前力扣569-员工薪水中位数的题解思路,利用窗口函数对频率分别以正序和逆序方式求和,然后求正序和逆序大于频率总值一半的公共数值,最后对所有符合条件的num求平均值就为题目所求的中位数。
①先求出以numbers为升序和降序时的总和;
1 SELECT number,
2 SUM(frequency) over(ORDER BY number) asc_accumu,
3 SUM(frequency) over(ORDER BY number DESC) desc_accumu
4 FROM numbers;
注意:numbers这一列最后是以第二个Sum中的order by 降序排序的,我实验了如果只有第一个sum则就是升序排序。

②求所有频率的总和;
1 SELECT SUM(frequency) total
2 FROM numbers;

③加上where条件,要求正序和逆序是要大于等于总和的一半,在求出平均值即可。
1 SELECT
2 ROUND(AVG(b.number), 1 ) median
3 FROM
4 (
5 SELECT
6 number,
7 SUM( frequency ) over ( ORDER BY number ) asc_accumu,
8 SUM( frequency ) over ( ORDER BY number DESC ) desc_accumu,
9 SUM( frequency ) total
10 FROM
11 numbers a
12 ) as b
13 WHERE asc_accumu >= total/2 AND desc_accumu >= total/2;
小知识:
①中位数思路

②sum() over():
SELECT id,name,salary,
SUM(salary) over (PARTITION BY id ORDER BY name) AS a
FROM employee b;
说明:
1执行:"ORDER BY name" 按照name进行升序排序。
2执行:"sum(salary)" 对salary进行求和,
求和特点:第n行的和总是等于 第n行 + n-1行 + n-2 的和(如:第3行的和总是第3行和第1和第2行三行的和)。
力扣571(MySQL)-给定数字的频率查询中位数(困难)的更多相关文章
- 力扣——single number (只出现一次的数字) python实现
题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 英 ...
- 力扣——single number 2(只出现一次的数字 2) python实现
题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? ...
- 力扣Leetcode 面试题56 - I. 数组中数字出现的次数
面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...
- JS数据结构第六篇 --- 二叉树力扣练习题
1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...
- 力扣(LeetCode)删除排序链表中的重复元素II 个人题解
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 思路和上一题类似(参考 力扣(LeetCode)删除排序链表中的重复元素 个人题解)) 只不过这里需要用到一个前 ...
- C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法
题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...
- 力扣 ——Remove Duplicates from Sorted List II(删除排序链表中的重复元素 II)python实现
题目描述: 中文: 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4-> ...
- 力扣—one plus(加一) python实现
题目描述: 中文: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头 ...
- 力扣——Next Permutation(下一个排列) python实现
题目描述: 中文: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...
- 力扣Leetcode 179. 最大数 EOJ 和你在一起 字符串拼接 组成最大数
最大数 力扣 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说 ...
随机推荐
- 【图算法】图卷积的演变-从谱图卷积到GCN
基础 傅里叶变换 傅里叶级数是对周期为T的确定性信号做展开,而傅里叶变换将周期推广到无穷,能对具有任意长度的信号做展开. 傅里叶级数和傅里叶变换是什么关系? 如下为傅里叶变换公式: \[\hat{f} ...
- 曲线艺术编程第一章 coding curves
原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http ...
- day14--Java常用类之字符串相关类02
Java常用类 2.字符串相关类 String.StringBuilder.StringBuffer类是三个字符串相关类. String类代表不可变字符序列,StringBuilder类和String ...
- day07-JavaScript04
JavaScript04 11.DOM02 11.3HTML-DOM文档说明 11.3.1基本介绍 在HTML DOM(文档对象模型)中,每个部分都是节点: 1)文档本身是文档节点 2)所有HTML元 ...
- oracle用户密码有@符号连接方法
oracle用户密码不小心设置了带有"@"符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误,其实解决办法很简单,转义即可,示例如下: exp system/\"x ...
- Ubuntu 14.04 升级到Gnome3.12z的折腾之旅(警示后来者)+推荐Extensions.-------(一)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2014-12-19 22:40:20 ...
- Python 批量合并csv文件
一.批量合并csv文件<方法1> import pandas as pd import glob import os # 获取所有CSV文件的路径 file_paths = glob.gl ...
- 【Oracle】通过LogMiner实现Oracle数据同步迁移
写在前面 最近在研究如何实现Oracle数据库之间的数据同步,网上的资料确实比较少.最好用的Oracle数据库同步工具是:GoldenGate ,而GoldenGate是要收费的.那么还有什么好的办法 ...
- verilog之readmemb
verilog之readmemb 1.基本作用 用于读取存储器的值的系统函数.这里首先要知道什么是存储器.在verilog中,有一些比较大的数据是需要存储的,一般需要使用存储器,语法结构类似二维数组. ...
- 学习Source Generators之输出生成的文件
上一篇文章学习了通过获取和解析swagger.json的内容,来生成API的请求响应类. 但是其中无法移动与编辑. 那么本文将介绍如何输出生成的文件. EmitCompilerGeneratedFil ...