项目实战:房产行业如何分析?
【题目】
“成交订单表”里记录了某房产平台(类似链家、贝壳等)每日房屋成交的明细。(贝壳面试题)
字段“成交客源渠道”中的值是“客源角色人”、“业主线上委托”、“”表示线下渠道,其余的成交客源渠道是线上。
1.当月截止昨天二手线上成交单量占比(含车位)>=50%的门店可获奖;
(线上成交占比=线上成交单量/总成交单量)
2.符合获奖条件的门店的第1单线上成交可获得200贝壳币(可以用于兑换奖金),第2单可获400贝壳币,第3单及以上可获800贝壳币,但车库不奖励(字段“房屋用途”中的值是”车位”、”车库”认为是车库);
3.在一个连续的SQL中实现以上需求,不能拆分成多个SQL,必须输出表格字段如下(可增加);
【解题思路】
房产平台贝壳的业务是什么?
贝壳业务的实质,是搭建了一个基于房地产服务的协作平台(ACN,agent cooperation network 经纪人协作网络)。房产经纪人、门店、品牌和其他服务提供者在这个平台上进行协同合作。
(图片来源贝壳IPO)
目前贝壳已成为国内最大的线上线下房产交易服务平台,覆盖了103所城市,连接265家地产经纪品牌,4.2万家门店,45.6万经纪人,2019年平台交易总额超2.12万亿,成交量超220万,手机APP月活达3900万。
(图片来源贝壳IPO)
对比原始数据表,可以发现本题要求输出表格中增加了3个字段,分别是:是否线上、经纪人所在门店的线上占比、该单应发的贝壳币。
1.线上成交占比
只有线上成交占比大于50%的门店订单才可以获得奖励,所以需要先得出每个门店的线上占比。
线上成交占比=线上成交单量/总成交单量
(1)哪些是线上成交的数据?
字段“成交客源渠道”中的值是“客源角色人”、“业主线上委托”、“”表示线下渠道,其余的成交客源渠道是线上。这种多条件判断的业务问题,要想到用《猴子 从零学会SQL》里讲过的case表达式。 利用case来对成交客源渠道字段赋值判断,如果为“线上”就返回1,不是就返回null(表示线下)。
select *,
(case when 成交客源渠道 ="客源角色人"
or 成交客源渠道 ="业主线上委托"
or 成交客源渠道 =""
then null
else 1
end) as 是否线上
from 成交订单表;
查询结果:
(2)每个门店的线上成交量
遇到“每个”这种业务问题,要想到用《猴子 从零学会SQL》里讲过的“分组汇总”。按门店分组(签约经纪人门店名称),然后统计线上成交数量(count)。
select *,
count(case when 成交客源渠道 ="客源角色人"
or 成交客源渠道 ="业主线上委托"
or 成交客源渠道 =""
then null
else 1
end
) as 是否线上
from 成交订单表
group by 签约经纪人门店名称;
(3)线上成交占比=线上成交单量/总成交单量
上面已经得到了每个门店的线上成交量。而总成交量可以用count(*)得到。
sql如下:
select *,
count(case when 成交客源渠道 ="客源角色人"
or 成交客源渠道 ="业主线上委托"
or 成交客源渠道 =""
then null
else 1
end
) / count(*) as 经纪人所在门店的线上占比
from 成交订单表
group by 签约经纪人门店名称;
查询结果:
将上面的查询结果当作临时表b。
2.该单应发的贝壳币
符合获奖条件的门店的第1单线上成交可获得200贝壳币(可以用于兑换奖金),第2单可获400贝壳币,第3单及以上可获800贝壳币,但车库不奖励(字段“房屋用途”中的值是”车位”、”车库”认为是车库)
(1)哪些是符合条件的门店?
根据题目的业务说明:当月截止昨天二手线上成交单量占比(含车位)>=50%的门店可获奖。
各门店的线上单量占比已经在上面的临时表b中得出。
本月截止昨天用函数 month (签约时间)=month(now()) 得出。
字段“房屋用途”中的值是”车位”、”车库”认为是车库,用where 来筛选。
sql如下:
select a.*,b.经纪人所在门店的线上占比
from 成交订单表 as a
left join b
on
a.签约经纪人门店名称=b.签约经纪人门店名称
where
b.经纪人所在门店的线上占比 >0.5
and month (a.签约时间)=month(now())
and a.房屋用途 ="";
查询结果:
(2)订单如何排名?
题目的业务需求是:符合获奖条件的门店的第1单线上成交可获得200贝壳币(可以用于兑换奖金),第2单可获400贝壳币,第3单及以上可获800贝壳币。
这里的第1单、第2单、第3单,是按每个门店的签约时间对订单进行排名。涉及到排名问题,要想到《猴子 从零学会SQL》里讲过的“窗口函数。
用专用窗口函数(row_number)来排名,按签约时间排序(order by)
sql如下:
select a.*,
row_number() over (partition by a.签约经纪人门店名称
order by a.签约时间 ) as 单量
from 成交订单表 as a
left join b
on
a.签约经纪人门店名称=b.签约经纪人门店名称
where
b.经纪人所在门店的线上占比 >0.5
and month (a.签约时间)=month(now())
and a.房屋用途 ="";
查询结果:
把上面的查询结果记为临时表c。
(3)根据单量得出对应的贝壳币
现在根据单量进行奖励,第1单线上成交可获得200贝壳币,第2单可获400贝壳币,第3单及以上可获800贝壳币,利用case when 来判断单量并进行赋值。
sql如下:
select c.*,
case when c.单量>= 3 then 800
when c.单量>= 2 then 400
else 200 end as 该单应发的贝壳币
from
(select *,
row_number()
over (partition by 签约经纪人门店名称
order by 签约时间 ) as 单量
from 成交订单表) as c;
查询结果:
3.合并字段
得出 是否线上,经纪人所在门店的线上占比,该单应发的贝壳币 3个字段的代码之后,我们合并在一个连续的SQL中实现题目的业务需求。
合并的sql如下:
select c.*,
case when c.单量>= 3 then 800
when c.单量>= 2 then 400
else 200 end as 该单应发的贝壳币
from
(select a.*, b.经纪人所在门店的线上占比,
case when 成交客源渠道 ="客源角色人"
or 成交客源渠道 ="业主线上委托"
or 成交客源渠道 =""
then null else 1 end as 是否线上,
row_number ()
over (partition by a.签约经纪人门店名称
order by a.签约时间) as 单量
from 成交订单表 as a
left join
(select 签约经纪人门店名称,
count(case when 成交客源渠道 ="客源角色人"
or 成交客源渠道 ="业主线上委托"
or 成交客源渠道 =""
then null else 1 end )
/ count(*) as 经纪人所在门店的线上占比
from
成交订单表
group by 签约经纪人门店名称) as b
on a.签约经纪人门店名称 = b.签约经纪人门店名称
where
b.经纪人所在门店的线上占比 > 0.5
and month (a.签约时间) = month(now())
and a.房屋用途 = "") as c;
查询结果:
【本题考点】
1.用多维度拆解分析方法,将复杂的业务问题拆解为可以解决的简单问题。
2.遇到多条件判断的问题,要想到用case语句来实现。
3.排名问题,要想到用窗口函数来实现。
4.遇到只有一个表且只能用一条SQL语句完成,可以联想到用多表联结,来实现复杂的业务。
项目实战:房产行业如何分析?相关推荐
- spark项目实战:电商分析平台之各个范围Session步长、访问时长占比统计(需求一)
spark项目实战:电商分析平台之各个范围Session步长.访问时长占比统计(需求一) 项目基本信息,架构,需要一览 各个范围Session步长.访问时长占比统计概述 各个范围Session步长.访 ...
- spark项目实战:电商分析平台之项目概述
spark项目实战:电商分析平台之项目概述 目录 项目概述 程序架构分析 需求解析 初始代码和完成代码存放在github上面 1. 项目概述 在访问电商网站时,我们的一些访问行为会产生相应的埋点日志( ...
- Hadoop项目实战-用户行为分析之应用概述(二)
1.概述 本课程的视频教程地址:<项目整体概述> 本节给大家分享的主题如下图所示: 下面我开始为大家分享第二节的内容--<项目整体概述>,下面开始今天的分享内容. 2.内容 从 ...
- iOS支付宝(Alipay)接入详细流程,比微信支付更简单,项目实战中的问题分析
最近在项目中接入了微信支付和支付宝支付,总的来说没有那么坑,很多人都说文档不全什么的,确实没有面面 俱到,但是认真一步一步测试下还是妥妥的,再配合懂得后台,效率也是很高的,看了这篇文章,你也只要几分钟 ...
- Hadoop项目实战---黑马论坛日志分析
1.项目描述 通过对黑马技术论坛的apache common日志进行分析, 计算论坛关键指标,供运营者决策. 2.数据情况 每行记录有5部分组成: 1.访问ip 2.访问时间 3.访问资源[跟着两个访 ...
- Hive项目实战:用Hive分析“余额宝”躺着赚大钱背后的逻辑
一.项目背景 前两年,支付宝推出的"余额宝"赚尽无数人的眼球,同时也吸引的大量的小额资金进入."余额宝"把用户的散钱利息提高到了年化收益率4.0%左右,比起银行 ...
- 大数据项目实战-招聘网站职位分析
目录 第一章:项目概述 1.1项目需求和目标 1.2预备知识 1.3项目架构设计及技术选取 1.4开发环境和开发工具 1.5项目开发流程 第二章:搭建大数据集群环境 2.1安装准备 2.2Hadoop ...
- 大数据——项目实战(使用Zeppelin分析电子商务消费行为分析)
使用Zeppelin分析电子商务消费行为分析 任务描述 需求概述 问题分析 Customer表 Transaction表 Store表 Review表 数据结构 连接至Zeppelin 1.数据获取 ...
- 十五、《大数据项目实战之用户行为分析》HBase数据表操作
HBase 为用户提供了一个非常方便的命令行操作方式,我们称之为HBase Shell. HBase Shell 提供了大多数的 HBase 命令,通过 HBase Shell 用户可以方 ...
最新文章
- 进阶学习(1) Gradle 项目管理工具的使用
- PokeCats开发者日志(二)
- SAP Smartforms 条码打印
- 深度学习入门初步——MNIST数据格式如何使用
- php如何生成订单号,php如何生成不重复订单号
- C语言怎么确定用什么整形,【求助各位大虾!】 怎样用 if 语句验证一个整形数字。...
- 【渝粤教育】国家开放大学2018年秋季 0699-21T阅读与写作 参考试题
- 浅尝EffectiveCSharp_1
- android放在上个元素的左边代码,控件悬浮在某个控件之上 Android五大布局方式——相对布局(RelativeLayout)属性详解...
- 作者:周虎,就职于山东农业大学农业大数据研究中心。
- 29 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义分配
- python爬虫---(2)爬虫基本流程
- 解决“远程会话已断开连接,因为访问被拒绝导致许可证存储的创建失败,请使用提升的权限运行远程桌面客户端”问题
- ssh公钥的生成、查看以及config的配置
- GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
- .net Core 3.1 项目打包部署到Windows服务
- X4扭曲字体或图形 coreldraw_CorelDRAWX4SP2简体中文正式版精简增强版
- 留学生 电脑安全与维护手册 (留学须知)
- centos 安装scp
- Rockchip Linux CMA开发文档
热门文章
- 运用百度地图api简单定位自己的位置
- VXLAN+EVPN控制平面和数据平面交互过程分析
- 一个不谋而合的管理现象--情绪化管理
- idea中.ignore的配置
- 评委对计算机知识竞赛的提问,主持人大赛评委提问参考题目
- Ghost win server2008 r2 x64标准版服务器专用V1测试版-蓝色动力网络出品
- Linux系统更换yum源的常用方法
- vue.js和vue.runtime.js
- 沈阳计算机考研学校排名,沈阳考研集训中心排名
- macs-fan-control 监视和控制Apple计算机上的风扇