首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「SQL面试题库」 No_20 给定数字的频率查询中位数

「SQL面试题库」 No_20 给定数字的频率查询中位数

作者头像
不吃西红柿
发布2023-03-30 20:11:35
发布2023-03-30 20:11:35
47400
代码可运行
举报
文章被收录于专栏:信息技术智库信息技术智库
运行总次数:0
代码可运行

🍅 1、专栏介绍

「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试,代码能力和工作效率也会有明显提升。

1.1你的收获

  1. 增强自信,搞定面试:在求职中,SQL是经常遇到的技能点,而这些题目也多数是真实的面试题,刷题可以让我们更好地备战面试,增强自信,提升自己的核心竞争力。
  2. 巩固SQL语法,高效搞定工作:通过不断练习,能够熟悉SQL的语法和常用函数,掌握SQL核心知识点,提高SQL编写能力。代码能力提升了,工作效率自然高了。
  3. 提高数据处理能力、锻炼思维能力:SQL是数据处理的核心工具,通过刷题可以让我们更好地理解数据处理的过程,提高数据分析的效率。SQL题目的难度不一,需要在一定时间内解决问题,培养了我们对问题的思考能力、解决问题的能力和对时间的把控能力等。

🍅 2、今日真题

题目介绍: 给定数字的频率查询中位数 find-median-given-frequency-of-numbers

难度困难

SQL架构

代码语言:javascript
代码运行次数:0
运行
复制
Numbers

表保存数字的值及其频率。

代码语言:javascript
代码运行次数:0
运行
复制
+----------+-------------+
|  Number  |  Frequency  |
+----------+-------------|
|  0       |  7          |
|  1       |  1          |
|  2       |  3          |
|  3       |  1          |
+----------+-------------+

在此表中,数字为

代码语言:javascript
代码运行次数:0
运行
复制
0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3

,所以中位数是

代码语言:javascript
代码运行次数:0
运行
复制
(0 + 0) / 2 = 0

代码语言:javascript
代码运行次数:0
运行
复制
+--------+
| median |
+--------|
| 0.0000 |
+--------+

请编写一个查询来查找所有数字的中位数并将结果命名为

代码语言:javascript
代码运行次数:0
运行
复制
median

代码语言:javascript
代码运行次数:0
运行
复制
sql
select 
    avg(cast(number as float)) median
from 
    (
        select 
            Number,
            Frequency,
            sum(Frequency) over(order by Number) - Frequency prev_sum,
            sum(Frequency) over(order by Number) curr_sum
        from Numbers
    ) t1,
    (
        select 
            sum(Frequency) total_sum
        from Numbers
    ) t2
where 
    t1.prev_sum <= (cast(t2.total_sum as float) / 2) and 
    t1.curr_sum >= (cast(t2.total_sum as float) / 2)

如果 n1.Number 为中位数,n1.Number(包含本身)前累计的数字应大于等于总数/2 同时n1.Number(不包含本身)前累计数字应小于等于总数/2

例如:0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3 共12个数

中位数0(包含本身)前累计的数字 7 >=6 0(不包含本身)前累计数字 0 <=6 例如:0,0,0,3,3,3 共6个数

中位数0(包含本身)前累计的数字 3 >=3 0(不包含本身)前累计数字 0 <=3

中位数3(包含本身)前累计的数字 6 >=3 3(不包含本身)前累计数字 3 <=3

代码语言:javascript
代码运行次数:0
运行
复制
sql
SELECT 
AVG(Number)median 
FROM
(SELECT n1.Number FROM Numbers n1 JOIN Numbers n2 ON n1.Number>=n2.Number 
 GROUP BY 
 n1.Number 
 HAVING 
 SUM(n2.Frequency)>=(SELECT SUM(Frequency) FROM Numbers)/2 
 AND 
 SUM(n2.Frequency)-AVG(n1.Frequency)<=(SELECT SUM(Frequency) FROM Numbers)/2
)s
  • 已经有灵感了?在评论区写下你的思路吧!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🍅 1、专栏介绍
    • 1.1你的收获
  • 🍅 2、今日真题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档