【题目】

用户访问次数表,列名包括用户编号、用户类型、访问量。要求在剔除访问次数前20%的用户后,每类用户的平均访问次数。(拼多多、网易面试题)

【解题思路】

使用逻辑树分析方法可以把这个复杂的问题拆解为3个子问题:

1)找出访问次数前20%的用户

2)剔除访问次数前20%的用户

3)每类用户的平均访问次数

下面分别来解决每个子问题

1.访问次数前20%的用户

先按“访问次数”排名,然后就可以找到”前20%”的数据。排名问题在《猴子 从零学会sql》里讲过可以用窗口函数来解决。

首先对所有用户的访问量按从低到高的顺序用窗口函数排名:

select *,      row_number() over(order by 访问量 desc) as 排名from 用户访问次数表;

排名后,如何找出前20%的数据呢?

排名<=最大的排名值 * 20%,就是前20%的数据。

把前面的排名结果表当作临时表a,加上筛选条件(where)对应的sql语句如下:

select * from awhere 排名<= 最大的排名 * 0.2;

最大的排名值如何得到呢?可以用下面的sql语句:

select max(排名)from a;

把前面的sql语句组合到一起就得到了筛选出排名前20%的数据了:

select * from awhere 排名<= (select max(排名) from a) * 0.2;

2.剔除访问次数前20%的用户

题目要求是“剔除访问次数前20%的用户”,也就是把上面sql语句里的where条件中的 <= 变成 >就获取到相反的数据了。

select * from awhere 排名 > (select max(排名) from a) * 0.2;

把前面得到的临时表a的sql语句带入后就是:

select * from (select *,       row_number() over(order by 访问量 desc) as 排名from 用户访问次数表) as awhere 排名 > (select max(排名) from a) * 0.2;

3.每类用户的平均访问次数

当“每个”出现的时候,就要想到《猴子 从零学会sql》里讲过的这时候就是要分组汇总了。

按“用户类型”分组(group by),然后汇总求平均访问次数avg(访问次数)。

select 用户类型,avg(访问量)from bgroup by 用户类型;

这里的表b就是前面第2步得到的临时表,带入sql里就是:

select 用户类型,avg(访问量)from (select * from (select *,       row_number() over(order by 访问量 desc) as 排名from 用户访问次数表) as awhere 排名 > (select max(排名) from a) * 0.2) as bgroup by 用户类型;

【本题考点】

1.面对复杂问题的分析能力

要会使用逻辑树分析方法将复杂问题拆解成简单问题排名问题使用窗口函数来实现。

2. 当有“每个”出现的时候,要想到用分组汇总,下图是常用的汇总函数

3.选出前百分之N的问题如何解决?下面是这类问题的解决模版

1)先使用窗口函数对数据排名得到临时表a

select *,       row_number() over(order by 排名的列 desc) as 排名from 表名;

2)然后用表a筛选出前百分之N的数据

select * from awhere 排名 <= (select max(排名) from a) * 百分之N;

3)如果是剔除前前百分之N的数据,也就是选出后(1-百分之N)的数据。例如选出后80%的数据,就把上面的where子句里的 <= 修改成 >

select * from awhere 排名 > (select max(排名) from a) * 百分之N;

推荐:如何从零学会sql?

sql查询百分之20到百分之40的数据_拼多多面试题:如何查找前20%的数据?相关推荐

  1. 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  2. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  3. 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  4. mysql及格率70以上_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划...

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  5. 图解SQL 004 拼多多面试题:如何查找前 20% 的数据?

    [题目] 用户访问次数表,列名包括用户编号.用户类型.访问量.要求在剔除访问次数前 20% 的用户后,每类用户的平均访问次数.(拼多多.网易面试题) [解题思路] 使用逻辑树分析方法可以把这个复杂的问 ...

  6. mysql数据库众数查询_拼多多面经分享:24个「数据分析

    一.贝叶斯公式复述并解释应用场景 P(A|B) = P(B|A)*P(A) / P(B) 如搜索query纠错,设A为正确的词,B为输入的词,那么: P(A|B)表示输入词B实际为A的概率 P(B|A ...

  7. sql 获取两个月内数据_如何在3个月的时间内自学成为数据分析师?

    从一名0基础的用户运营自学成为数据分析师,我花了大半年的时间,但是抛开工作时间,系统性的学习只花了3个月. 这篇文章会从学习资源和学习路径两个方面分享我的自学经验,希望能对大家有所帮助. 先来说说有哪 ...

  8. 亚马逊查询关键词排名的工具_拼多多关键词排名查询工具怎么查关键词的?

    拼多多商家在编辑商品标题和开直通车的时候,都需要先了解关键词的质量分和排名,才能更好的推广,怎么找到有效高效的关键词呢?还有就是对手的开车关键词和出价,这些都是商家在分析数据的时候,比较需要的. 商家 ...

  9. sql查询当天交易总额最大的用户信息_京东用户行为数据分析(SQL)

    一. 项目背景 项目对京东零售集团的运营数据集进行指标分析,研究京东用户在购物过程中的行为习 惯,购物偏好,在购物过程中各个环节的转化和流失情况,为运营决策提供数据支撑. 二. 数据介绍 本数据集采用 ...

最新文章

  1. java property异常_Java常见的异常和解决的办法
  2. MFC最小化到系统托盘
  3. 004-什么是软件测试?软件测试的目的与原则
  4. 7天学会spring cloud教程
  5. webpack从零开始第2课: 配置文件
  6. html 按下和松开事件,JQuery通过键盘控制键盘按下与松开触发事件
  7. comlx 牌计算机音乐怎么设置,最具性价比的全能型 MIDI 键盘:Nektar Impact LX+ 键盘视频教程...
  8. linux命令行怎么播放,如何在在 Linux 命令行中观看彩虹猫
  9. UI5 table display visible row count logic calculation calculate
  10. lucene索引_在崩溃或断电后测试Lucene的索引耐久性
  11. CentOS上安装Docker (图解)
  12. ASP.Net新手项目经验谈
  13. android安卓Sqlite数据库实现用户登录注册
  14. 音频文件转码工具文档 目录 1. 音频文件转码 1 1.1. 简介 1 1.2. 转换命令示例 2 1.3. wav 文件转 16k 16bits 位深的单声道pcm文件 2 1.4. mp3 文件转
  15. 如何迈出客户拜访的第一步
  16. Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
  17. linux文件属性详解及文件类型
  18. eclipse hadoop开发环境配置
  19. 高质量病毒——暴风一号(BoyFine)代码.vbs
  20. Airtest与夜神模拟器连接

热门文章

  1. HDU 1863 畅通工程 最小生成树
  2. jQuery validate 表单验证,涵盖各种类型数据
  3. MSP430程序库五SPI同步串行通信
  4. java从静态代理到动态代理的理解
  5. 新思科技助力IBM将AI计算性能提升1000倍
  6. 这8个专业对“数学”要求很高,考生不要误选!
  7. dubbo内置哪几种服务容器_dubbo启动服务之容器(Container)
  8. 怎么使用java初始化链表_Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等...
  9. java 实验报告模板_Java实验报告模板.doc.doc
  10. Java 多线程同步和异步详解