【MySQL】中位数巧解之给定数字的频率查询中位数

力扣题

1、题目地址

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

2、模拟表

Numbers 表:

Column NameType
numint
frequencyint
  • num 是这张表的主键(具有唯一值的列)。
  • 这张表的每一行表示某个数字在该数据库中的出现频率。

3、要求

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

编写解决方案,解压 Numbers 表,报告数据库中所有数字的 中位数 。

结果四舍五入至 一位小数 。

4、示例

输入:

Numbers 表:

numfrequency
07
11
23
31

输出:

median
0.0

解释:

如果解压这个 Numbers 表,可以得到 [0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3] ,所以中位数是 (0 + 0) / 2 = 0 。

5、代码编写

我的代码

我的思路:
1、计算总出现多少次数(tmp),示例12次
2、根据是奇数次数(tmp2)或偶数次数(tmp3)拿到对应的位置值(tmp4),示例里偶数(12),拿到6和7
3、累加数字出现次数(tmp5)(7-8-11-12),可以用做范围用
4、位置值(tmp4)和累加数字出现次数(tmp5),控制 tmp4 小于 tmp5 再去取最小值即可,里面需要对位置值(tmp4)进行分组的原因是可能取出的 tmp5 不一样(奇数取到的就一定只有一个,但偶数可能取到两个的情况)
5、将最小值取出并去重,可能偶数取出两个相同的情况,然后再去累加数字出现次数(tmp5)查询即可,记得要求说要保留一位小数

with tmp as (select sum(frequency) as numfrom Numbers
), tmp2 as (select ceil(num/2) as numfrom tmpwhere mod(num, 2) = 1
), tmp3 as (select num/2 as numfrom tmpwhere mod(num, 2) = 0union allselect num/2+1 as numfrom tmpwhere mod(num, 2) = 0
), tmp4 as (select * from tmp2union allselect * from tmp3
), tmp5 as (select num, sum(frequency) over(order by num) as numRangefrom Numbers
)
select round(avg(num), 1) AS median
from tmp5
where numRange in (select distinct numRangefrom (select one.num, min(two.numRange) AS numRangefrom tmp4 oneleft join tmp5 two on one.num <= two.numRangegroup by one.num) AS one
)

网友代码(巧妙)

思路:新增两列,将从后往前和从前往后的频数相加,两个数都需要大于等于总数一半,再取平均

with tmp as (select num, frequency,sum(frequency) over(order by num asc) as total,sum(frequency) over(order by num desc) as total1from Numbers
)
select avg(num) as median
from tmp
where total>=(select sum(frequency) from Numbers)/2
and total1>=(select sum(frequency) from Numbers)/2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扭矩测量仪行业研究:规模不断扩大市场需求旺盛

一、市场趋势 扭矩测量仪是用于精确测量旋转力矩的精密仪器&#xff0c;广泛应用于汽车、航空航天、机械制造和电子产品等领域。随着工业自动化程度的提升和精密制造的需求增加&#xff0c;扭矩测量仪的市场呈现出稳步增长的趋势。 二、主要竞争者 市场上的主要竞争企业包括德国…

华为OD机试 - 求字符串中所有整数的最小和(Java JS Python C C++)

题目描述 输入字符串s&#xff0c;输出s中包含所有整数的最小和。 说明&#xff1a; 字符串s&#xff0c;只包含 a-z A-Z 合法的整数包括 1&#xff09;正整数&#xff1a;一个或者多个0-9组成&#xff0c;如 0 2 3 002 102 2&#xff09;负整数&#xff1a;负号 – 开头…

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】

目录&#xff1a; 每篇前言&#xff1a;1.使用分布式爬取豆瓣电影信息&#xff08;1&#xff09;settings.py文件中的配置&#xff1a;&#xff08;2&#xff09;spider文件的更改&#xff1a;&#xff08;3&#xff09;items.py文件&#xff08;两个项目一致&#xff01;&…

Vue el-table 合并单元格

一般常见的就是下图这种的单列&#xff0c;上下重复进行合并。 有时候可能也会需要多行多列的合并。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&qu…

MySQL TRIM函数

TRIM函数通常用于去除字符串的开头和结尾的空格或其他指定字符。在不同的数据库系统中&#xff0c;TRIM函数的语法可能略有不同&#xff0c;以下是一些常见数据库系统中TRIM函数的用法示例&#xff1a; ### 1. MySQL 在MySQL中&#xff0c;TRIM函数的语法如下&#xff1a; sql …

3.19网络编程

select实现的TCP并发服务器 #include <myhead.h> #define SER_IP "192.168.141.134" #define SER_PORT 8888 int main(int argc, const char *argv[]) {// 1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0);if (sfd -1){perr…

Division by Invariant Integers using Multiplication

在处理器中&#xff0c;整数除法的成本通常是整数乘法的几倍&#xff1a; 流水线式的组合乘法器通常在不到10个周期内完成操作&#xff1b;而对于整数除法则没有硬件支持&#xff0c;或者使用的迭代除法器比乘法器慢几倍。 表 1.1 比较了一些处理器上乘法和除法的时间。这张表…

php 页面中下载文件|图片

一、需求 页面中点击下载图片 二、实现 protected function pageLoad(){$filePath $_GET[file];$host $_SERVER[HTTP_HOST];$file http://.$host.$filePath;$fileName basename($filePath);$content file_get_contents($file);ob_clean();$suffixArr explode(., $file…

ceph删除坏的磁盘

在Ceph集群中&#xff0c;查看和处理坏掉的磁盘主要涉及到以下几个步骤&#xff1a;检查磁盘状态、从集群中删除坏磁盘、最后是物理或逻辑地替换坏掉的磁盘。请注意&#xff0c;处理Ceph集群的操作需要谨慎执行&#xff0c;并确保在操作前你有足够的备份和恢复计划 1. 查看集群…

数据库系统概论-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下数据库系统概论中的练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 数据库系统概论系列文章传送门&#xff1a; 第一章 绪论 第二/三章 关系数据库和标准语言SQL 第四/五章 数据库安全性和完整性…

服务器硬件基础知识和云服务器的选购技巧

概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术&#xff0c;这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器&#xff08;CPU&#xff09;作为服务器的计算引擎&#xff0c;内存&#xff08;RAM&#xff09;用于数据临…

消金公司新管理办法对谁影响更大?

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 2023年9月&#xff0c;金融监管总局发布规章立法工作计划&#xff0c;首提修订《消费金融公司试点管理办法》&#xff1b;12月&#xff0c;金融监管总局在向各消金公司内部征询后&#xff0c;向社会公开消金公司管理办法…

zookeeper快速入门(合集)

zookeeper作为一个分布式协调框架&#xff0c;它的创建就是为了方便或者简化分布式应用的开发。除了服务注册与发现之外&#xff0c;它还能够提供更多的功能&#xff0c;但是对于入门来说&#xff0c;看这一篇就够了。后续会讲zookeeper的架构设计与原理&#xff0c;比如zookee…

【C++11】c++ - libc++abi.dylib:以 std::__1::system_error 类型的未捕获异常终止:互斥锁失败:参数无效

【C11】 c - libcabi.dylib:以 std::__1::system_error 类型的未捕获异常终止:互斥锁失败:参数无效 背景&#xff1a; 一个线程池的编写的时候 放在 windows使用的使用是正常的 &#xff0c;但是放到 mac 乃至 类linux环境下就会异常 上面 c - libcabi.dylib:以 std::__1::sys…

【学习】软件测试中的二八定理是什么?如何提高测试的效率和质量

软件测试领域的二八定理&#xff0c;是指在软件测试过程中&#xff0c;通常只有20%的测试用例能够发现软件中80%的错误。这一现象表明&#xff0c;软件测试的效率和效果并不成正比&#xff0c;测试用例的数量并不等于发现错误的能力。因此&#xff0c;在软件测试过程中&#xf…

Linux系统及操作 (05)

帐号控制总述 基于账户身份对资源访问进行控制 账户类别&#xff1a;用户帐号&#xff0c;组帐号识别方式&#xff1a;UID[ linux系统自动给予用户编号 ]&#xff0c;GID[ 组帐号编号 ]不同的用户/账户对资源的访问权限不同 用户帐号(UID)&#xff1a; 超级用户root (权限最大…

Android Telephony | SIM 卡管理和subId、slotId、phoneId 定义关系说明

相关业务背景 DSDS双卡双待 &#xff1a;手机可以插入两张手机卡&#xff0c;而且能同时待机&#xff0c;但是某一时刻只能有一张卡上有电话。 一个SIM卡代表一个账号&#xff0c;那么双卡手机就意味着多账户&#xff0c;需要增加多账户管理和业务处理。 账号管理&#xff1…

<Linux> 生产者消费者模型

目录 前言&#xff1a; 一、什么是生产者消费者模型 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;生产者消费者之间的关系 &#xff08;三&#xff09;生产者消费者模型特点 &#xff08;四&#xff09;生产者消费者模型的优点 二、基于阻塞队列实现生产…

Java 如何实现多线程之间的通讯和协作

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 Java 如何实现多线程之间的通讯和协作 在Java中,多线程之间的通讯和协作可以通过以下几种方式实现: 使用wait()、notify()、notifyAll()方法:这些方法是…

面试算法-44-两数之和 II - 输入有序数组

题目 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < nu…