数据分析笔试经典sql题解

article/2025/9/27 19:38:48

 

欢迎关注微信公众号:开心数据

前言:sql是数据分析师笔试必考的考点之一,常考的题型有行列转换、联表查询,这些都比较简单,一般考的最难的就是hivesql窗口函数联表查询,普通的聚合函数每组(Group by)只返回一个值,而窗口函数则可为窗口中的每行都返回一个值。常考的窗口函数也就那几个,也是数据分析工作中经常用到的,row_number、rank、dense_rank(要搞清楚他们的区别),以及ntile,lead等等。下面分享几道数据分析笔试中的经典sql题。(本文默认大家了解窗口函数语法)

1、行列转换(京东数据分析笔试题)

表sales

yearm1m2m3m4
19911.11.21.11.3
19921.21.31.31.4

请转换成这个样子

yearmonthamount
199111.1
199121.2
199131.1
199141.3
199211.2
199221.3
199231.3
199241.4

参考题解:

select * from(
select year,case when m1 then 1 else null end month,m1 amount from sales
union all 
select year,case when m2 then 2 else null end month,m2 amount from sales
union all
select year,case when m3 then 3 else null end month,m3 amount from sales
union all 
select year,case when m4 then 4 else null end month,m4 amount from sales)t
order by year,month

 

2、某外卖平台交易表user_goods_table有如下字段

  • user_name
  • goods_kind  外卖种类

求每个用户购买外卖品类的偏好分布,并取出每个用户购买最多的外卖品类

这就需要用到窗口函数,每一行返回一个聚合值

参考题解

select a.user_name,a.goods_kind from (
select user_name,goods_kind,row_number() over(partition by user_name order by count(goods_kind) desc) r
from user_goods_table)a
where a.r=1

 

3、连续7天登陆的客户

login_users 有如下字段

  • uid
  • logdate

关键在于如何判断连续,利用窗口函数row_number,对uid分组排序后,用登陆日期减去排序的序号,如果是连续的话,那得到的日期flag_date就会相同,再利用uid和falg_date分组并求和,再筛选出大于7的就行

参考题解

select t1.uid,count(1) as cnt from (
select uid,logdate,rank,date_sub(t.logdate,t.rank) as flag_date from(
select uid,logdate, row_number() over(partition by uid order by logdate ) as rank from 
login_users)t)t1
group by t1.uid ,flag_date having cnt>=7

 

4、某顶尖支付平台交易表sales字段user_name,amount,求支付金额在前20%的用户

参考题解:

select b.user_name from
(select user_name,ntile(5) over(partition by user_name order by sum(amount) desc) as level
from sales )b
where b.level=1

 

5、以下两张表

1、统计每个类目每天的成交店铺数、成交额和用户均成交额

2、统计2019-06-25当天每个类目成交额前10%的店铺清单(类目/店铺ID/成交额)

参考题解1:关联的时候注意关联条件有两个,date和mall_id

select a.date,b.cate,count(1),sum(gmv),avg(gmv)
from mall_gmv_1d a
left join  mall_cate_1d b
on a.date = b.date and a.mall_id = b.mall_idwhere gmv > 0group by a.date,b.cate

参考题解2:

select t.date,t.mall_id,t.total from(
select a.mall_id,b.cate,sum(a.gmv) total,ntile(10) over(partition b.cate order by sum(gmv) desc) r
from mall_gmv_1d  a
left join mall_cate_1d b
on a. mall_id=b.mall_id
where a.date='2019-06-25'
group by a.mall,b.cate)t
where t.r=1

 


http://chatgpt.dhexx.cn/article/1ruoeah7.shtml

相关文章

滴滴出行2020数据分析面试题

目录 数据来源字段释义指标释义其他信息加载包加载数据数据预处理 问题1 订单的应答率、完单率分别是多少?2 呼叫应答时间多长?3 呼叫量最高的是哪一个小时(当地时间)?呼叫量最少的是哪一个小时(当地时间&a…

大数据分析实习生应该如何选择职业方向?

那么,大数据方向实习生到底该做些什么? Excel2013目前可以支持104万行数据,即使是这样也远远算不上大数据。 以下是华院数据整理的2015年大数据相关公司排名 看看你的公司在不在里边? 话说回来,对于一个实习生来说,让你处理Ex…

大数据分析实习生面试题库

大数据分析是一个有吸引力的领域,因为它不仅有利可图,而且您有机会从事有趣的项目,而且您总是在学习新事物。如果您想从头开始,请查看大数据分析实习生面试题库以准备面试要点。 大数据分析是一个有吸引力的领域。这是有利可图的&…

数据分析师实习岗笔试题(part1)

笔试后记,仅供参考 因为公司说不能泄露笔试题,所以我就加了点润色,但是不影响内容 限时免费:3小时 前言 笔试时间:2020年6月 笔试方式:在线笔试 笔试内容:sql语言、R语言/python、统计学相关知识 笔试时间:2小时之内 来几个励志的名人名言吧 要随时牢记在心中:决心…

【数据分析】滴滴数据分析岗实习经验

转载自:数据管道 原作者介绍:双非院校刚毕业的统计硕士,目前在滴滴工作,有8个月的数据分析实习经历,面试过10位以上数据分析实习生,最终成为了产品经理。 在原文的基础上有过删减。 两个主题 本文的主要目…

数据分析真题日刷 | 网易2018实习生招聘笔试题-数据分析实习生

上周开始实习,博客更新就缓下来了。这是十天前做的套题了,现在拾起来把它再整理整理。 网易数据分析实习生的笔试题,和校招的题目还是有部分重复的,不过难度也不小。 今日真题 网易2018实习生招聘笔试题-数据分析实习生 &#x…

数据分析——实习僧数据分析岗招聘信息分析

随着互联网技术不断完善,市场竞争日益激烈,粗放经营的企业将很难实现可持续发展。为改变这一现状,越来越多的企业开始对自身数据进行深度分析和挖掘,并以此辅助决策人员进行精细化决策管理。由此,越来越多的数据分析师应运而生。 本人初步踏入这一领域,希望对数据分析实…

分析数据分析实习岗位信息(1、数据获取)

目录 1.1 网页分析1.2 字体反扒机制1.3 构造字典1.4 创建表1.5 根据自己的需要进行修改 又到了一年一度的秋招了,由于受疫情的影响,部分公司减少了数据分析相关岗位的实习名额,为了更了解秋招的相关岗位信息,这里针对实习僧 网站…

我在滴滴数据分析岗实习了8个月

作者介绍:双非院校刚毕业的统计硕士,目前在滴滴工作,有8个月的数据分析实习经历,面试过10位以上数据分析实习生,最终成为了产品经理。 两个主题 本文的主要目标是帮助一些刚入门的同学了解互联网公司中“数据分析”岗位…

LOUVAIN——社交网络挖掘之大规模网络的社区发现算法

LOUVAIN——社交网络挖掘之大规模网络的社区发现算法 算法来源 该算法来源于文章Fast unfolding of communities in large networks,简称为Louvian。 算法原理 Louvain算法是基于模块度(Modularity)的社区发现算法,该算法在效率…

泛运筹理论初探——Louvain算法简介

图论-图论算法之Louvain 社区发现算法简介之Louvain算法 在本次文章中,我们将会介绍经典的社区发现方法,也就是Louvain算法。这种算法在社群发现等应用的效果较好,是比较经典的图挖掘类算法,在金融风控行业挖掘诈骗团伙等应用…

Louvain社区划分算法及Java语言实现

Louvain社区划分算法及Java语言实现 社区划分算法处理的对象Louvain社区发现算法全局模块度单层算法过程多层算法过程Java代码实现图实现模块度计算单层louvain实现多层louvain实现运行入口,使用方法 社区划分算法处理的对象 社区划分算法又称社区发现算法&#xf…

社区发现算法-Community Detection-NormalizeCut/Louvain/NMF/LPA

本文结构安排 图聚类简介 正则化割 Louvain 非负矩阵分解(NMF) 其他常见方法 图(graph):是一种由点和边集构成的结构 G ( V , E ) G(V,E) G(V,E) 图聚类(graph clustering) : 将点划分为不同的簇,使得簇内的边尽量多,簇之间…

Louvain算法在反作弊上的应用

作者 | ANTI 一、概述 随着互联网技术的发展,人们享受互联网带来的红利的同时,也面临着黑产对整个互联网健康发展带来的危害,例如薅羊毛、刷单、刷流量/粉丝、品控、诈骗、快排等等,反作弊作为打击黑产的中坚力量,持…

community_louvain社群划分方法

第一、 这个方法是一个典型的EM算法。定义了一个“模块度”的量化评价指标,然后结合上优化方法,不断地优化模块度,最终得到社群划分的结果。 第二、模块度的定义,具体如下: 对于图中任意两个节点,i和j 1、…

Louvain 社团发现算法学习(我的java实现+数据用例)

为了大家方便,直接把数据放在github了: https://github.com/qq547276542/Louvain 算法介绍: Louvain 算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其…

‘ network communites’(网络社区)(二)(louvain算法实现)

引言: 在(一)中我们学习到了什么是‘network communites’(网络社区)及其目标函数Q的求取,接下来我们要说明的是,我们要通过怎样的算法来实现将你的网络分成若干个集群。 一:louva…

neo4j实现Louvain算法

文章目录 例子一:创建一个属性图(无权)一、属性图如下二、实现算法1.stream模式执行Louvain算法(匿名图)2.结果如下 总结一:例子二:创建一个属性图(有权)一、属性图如下二…

社区发现系列03-Louvain算法分辨率

1、分辨率局限 louvain算法存在的问题:分辨率局限。就是说当通过优化模块度来发现社区结构时,网络在存在一个固有的分辨率局限,导致一些规模较小但是结构显著的社区淹没在大的社区中,无法被识别到。 造成这个问题的根本原因是模块…

(Leiden)From Louvain to Leiden:guaranteeing well-connected communities

Leiden算法 论文地址 Leiden算法是近几年的SOTA算法之一。 Louvain 算法有一个主要的缺陷:可能会产生任意的连接性不好的社区(甚至不连通)。为了解决这个问题,作者引入了Leiden算法。证明了该算法产生的社区保证是连通的。此外证明了当Leiden算法迭代应…