美文网首页
SQL每日一题(2020-06-08)

SQL每日一题(2020-06-08)

作者: 扎西的德勒 | 来源:发表于2020-06-08 10:01 被阅读0次

题目:

Numbers 表保存数字的值及其频率。 image
在此表中,数字为 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 3,所以中位数是 (0 + 0) / 2 = 0。
image

请编写一个查询来查找所有数字的中位数并将结果命名为 median 。注意:什么是中位数?当一串数字是奇数个时,例如8,3,5,1,4。我们按顺序排列后为:1,3,4,5,8。那么4就是中位数 当一串数字为偶数个时,例如8,3,5,1,4,2。我们按顺序排列后为:1,2,3,4,5,8。那么(3+4)/2=3.5就是中位数。

参考答案:

数据库版本:Server version: 8.0.20 MySQL Community Server - GPL

建表语句

create table dailytest_20200608(
    number int,
    frequency int
);

数据准备

insert into dailytest_20200608 values(0,7),(1,1),(2,3),(3,1);

查询逻辑

select
       number
from (select A.number,
#        获取相同number对应的起始下标
             @r := @r + 1                                  as start_index,
#        获取相同number对应的结束下标
             @r := @r + frequency - 1                      as end_index,
#        获取中位数的起始下标
             if(cnt mod 2 = 0, cnt div 2, (cnt div 2) + 1) as first_index,
#        获取中位数的结束下标
             (cnt div 2) + 1                               as second_index
      from dailytest_20200608 A,
           (select sum(frequency) as cnt from dailytest_20200608) B,
           (select @r := 0) C) D
where 
#       中位数的起始下标匹配number的起始下标和结束下标
      (first_index >= start_index and first_index <= end_index)
    or 
#       中位数的结束下标匹配number的起始下标和结束下标
      (second_index >= start_index and second_index <= end_index);

附:
题目来源:https://mp.weixin.qq.com/s/dAEuoagQn20dues5Fmz9Eg
参考答案:https://www.cnblogs.com/longlongaway/p/12779782.html
https://blog.csdn.net/Hello_JavaScript/article/details/103332960
https://blog.csdn.net/qq_43618030/article/details/104239641
拓展题目:https://www.cnblogs.com/longlongaway/p/12779810.html
https://blog.csdn.net/liuade/article/details/82668681

相关文章

  • SQL每日一题(2020-06-08)

    题目: Numbers 表保存数字的值及其频率。 请编写一个查询来查找所有数字的中位数并将结果命名为 median...

  • SQL每日一题(20200819)

    题目 有一个商场,每日人流量信息被记录在这三列信息中:序号(id)、日期(date)、人流量(people)。请编...

  • SQL每日一题(20200817)

    题目 有如下一张表T 列AID和BID是一对多的关系,希望将BID中同时存在3和5的AID找出来,预计的结果如下:...

  • Day 4 Project 我的微信好友

    附:每日一题

  • 经典Hive SQL面试题

    第一题 需求 实现 数据准备 查询SQL 第二题 需求 实现 数据准备 查询SQL实现 第三题 需求 实现 数据准...

  • SQL每日一题(2020-07-02)

    题目: 你能写一个 SQL 查询语句,找到只出现过一次的数字中,最大的一个数字吗?下面是测试数据 对于上面给出的样...

  • SQL每日一题(2020-07-01) ***

    题目: 订单中有多个商品,想要查询订单表(Orders)中同时包含有商品A、商品B、商品C等的所有订单信息。 希望...

  • SQL每日一题(2020-06-30)

    题目: 在 微信 或者 QQ这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请。 表 request...

  • SQL每日一题(2020-06-09)

    题目: 从一张考勤表TAB中找出员工每天的上班,下班打卡的具体时间? 考勤表中相关字段如下:ID,NAME,NO,...

  • SQL每日一题(2020-06-22)

    题目: 编写一个 SQL 查询,查找所有至少连续出现两次的数字。 例如,给定上面的 Logs 表, 1 和2是连续...

网友评论

      本文标题:SQL每日一题(2020-06-08)

      本文链接:https://www.haomeiwen.com/subject/mtfltktx.html