牛客网SQL--某东篇
计算商城中2021年每月的GMV
问题:请计算商城中2021年每月的GMV,输出GMV大于10w的每月GMV,值保留到整数。
注:GMV为已付款订单和未付款订单两者之和。结果按GMV升序排序。
场景逻辑说明:
用户将购物车中多件商品一起下单时,订单总表会生成一个订单(但此时未付款,status-订单状态为0,表示待付款);
当用户支付完成时,在订单总表修改对应订单记录的status-订单状态为1,表示已付款;
若用户退货退款,在订单总表生成一条交易总金额为负值的记录(表示退款金额,订单号为退款单号,status-订单状态为2表示已退款)。
该题为简单题,一张表就可以解决
逻辑顺序为
- from 表 tb_order_overall
- 添加条件
* 每月:GROUP BY DATE_FORMAT(time,"%Y-%m)
* 大于十万
* GMV为已付款订单和未付款订单两者之和:status IN (‘0’,‘1’)
* 2021年: LIKE “2021%”
* 升序 - 查找
- 时间 DATE_FORMAT(event_time,"%Y-%m")
- 每月GMV,要求整数: round(SUM(total_amount) ,0)
SELECT DATE_FORMAT(event_time,"%Y-%m"),
SUM(total_amount) st
FROM tb_order_overall
where status in ("0","1")
AND event_time LIKE "2021%"
GROUP BY DATE_FORMAT(event_time,"%Y-%m")
HAVING st>100000
ORDER BY st
统计2021年10月每个退货率不大于0.5的商品各项指标
问题:请统计2021年10月每个有展示记录的退货率不大于0.5的商品各项指标,
注:
商品点展比=点击数÷展示数;
加购率=加购数÷点击数;
成单率=付款数÷加购数;退货率=退款数÷付款数,
当分母为0时整体结果记为0,结果中各项指标保留3位小数,并按商品ID升序排序。
- 时间:WHERE DATE_FORMAT(event_time,"%Y-%m") = “2021-10”
- 各个商品:GROUP BY product_id
- 各个比率:
商品点展比 SUM(if_click) / COUNT(if_click)
加购率 SUM(if_cart) / SUM(if_click)
成单率 SUM(if_payment)/SUM(if_cart)
退货率 SUM(if_refund)/ SUM(if_payment) - 退货率不大于0.5 HAVING 退货率<=0.5
- order by product_id
SELECT product_id,
round(SUM(if_click)/COUNT(if_click),3) ctr,
round(SUM(if_cart)/SUM(if_click),3) cart_rate,
round(SUM(if_payment)/SUM(if_cart),3) pay_rate,
round(SUM(if_refund)/ SUM(if_payment),3) ref_rate
FROM tb_user_event
WHERE DATE_FORMAT(event_time,"%Y-%m") = "2021-10"
GROUP BY product_id
HAVING ref_rate <=0.5
order by ref_rate
某店铺的各商品毛利率及店铺整体毛利率
场景逻辑说明:
用户将购物车中多件商品一起下单时,订单总表会生成一个订单(但此时未付款,status-订单状态为0表示待付款),在订单明细表生成该订单中每个商品的信息;
当用户支付完成时,在订单总表修改对应订单记录的status-订单状态为1表示已付款;
若用户退货退款,在订单总表生成一条交易总金额为负值的记录(表示退款金额,订单号为退款单号,status-订单状态为2表示已退款)。
问题:请计算2021年10月以来店铺901中商品毛利率大于24.9%的商品信息及店铺整体毛利率。
注:商品毛利率=(1-进价/平均单件售价)*100%;
店铺毛利率=(1-总进价成本/总销售收入)*100%。
结果先输出店铺毛利率,再按商品ID升序输出各商品毛利率,均保留1位小数。
解体思路
统计各个商品信息:
GROUP BY product_id
产品表连接订单表、连接订单详细表:表INNER JOIN表INNER JOIN表
增加题目条件:
日期 DATE_FORMAT(too.event_time,"%Y-%m") >= “2021-10”
商店 tp.shop_id = 901计算商品毛利率 a
1-SUM(in_price * cnt)/SUM(price * cnt)
不用 1-in_price/AVG(price) 是因为in_price会报FD错误计算商店毛利路
利用 ROLL UP 函数 对所有product生成 合计,就是商品毛利率将合计的NULL 变为 店铺汇总,并将毛利率变为百分比
IFNULL(product_id,“店铺汇总”)
CONCAT(round(a * 100,1),"%")排序
order by 毛利率
SELECT IFNULL(t.pid,"店铺汇总"),concat(t.interest,"%") profit_rate
FROM
(SELECT tod.product_id pid,
round((1-SUM(in_price*cnt)/SUM(price*cnt))*100,1) interest
FROM tb_product_info tp INNER JOIN tb_order_detail tod ON tp.product_id = tod.product_idINNER JOIN tb_order_overall too ON too.order_id = tod.order_id
WHERE DATE_FORMAT(too.event_time,"%Y-%m") >= "2021-10"
AND tp.shop_id = 901
GROUP BY tod.product_id
WITH ROLLUP
HAVING interest >= 24.9 OR pid IS NULL )t
order by t.pid
零食类商品中复购率top3高的商品
问题:请统计零食类商品中复购率top3高的商品。
注:复购率指用户在一段时间内对某商品的重复购买比例,复购率越大,则反映出消费者对品牌的忠诚度就越高,也叫回头率
此处我们定义:某商品复购率 = 近90天内购买它至少两次的人数 ÷ 购买它的总人数
近90天指包含最大日期(记为当天)在内的近90天。结果中复购率保留3位小数,并按复购率倒序、商品ID升序排序
这个题我踩的坑是:复购率其实是先聚焦用户再看商品的一个比率,而我一开始就只是考虑的商品
解题思路
- 三表连接:因为要tag\product id\uid还有event time
- 找到 各个用户 买的 各个零食
tag = “零食”
GROUP BY uid,product_id
- 找到 各个用户 买的 各个零食
- 近九十天:event_time >=(SELECT DATE_SUB(max(event_time) INTERVAL 89 DAY) FROM )
- 找到复购的产品 IF(COUNT(event_time) >1,1,0) repurchase
- 上面为一张表
- 复购率:
- SUM(repurchase) 复购人数
- 除以
- COUNT(repurchase) 购买人数
- 因为上一张表是group by uid , pid
所以这个表有多个pid 故 group pid
或者说产品复购率最终还是要回到产品上 - top3 + 复购率倒序、商品ID升序排序
- ORDER BY repurchase DESC , pid
- LIMIT 3
SELECT t.product_id,
ROUND(SUM(repurchase)/ COUNT(repurchase),3) re_rate
FROM
(SELECT uid, product_id, IF(COUNT(event_time)>1, 1, 0) as repurchaseFROM tb_order_detailJOIN tb_order_overall USING(order_id)JOIN tb_product_info USING(product_id)WHERE tag="零食" AND event_time >= (SELECT DATE_SUB(MAX(event_time), INTERVAL 89 DAY)FROM tb_order_overall)GROUP BY uid, product_id)tGROUP BY t.product_idORDER BY re_rate desc ,t.product_idlimit 3
10月的新户客单价和获客成本
SELECT ROUND(SUM(total_amount)/ COUNT(DISTINCT uid),1),ROUND(AVG(sump-total_amount),1)
FROM
(SELECT order_id,sum(price*cnt) sump FROM tb_order_detail GROUP BY order_id) t1
INNER JOIN
(SELECT order_id, uid,total_amount,event_time,rank()over(partition by uid order by event_time) rnk
FROM tb_order_overall
)t2
ON t1.order_id = t2.order_id
WHERE rnk = 1
AND DATE_FORMAT(event_time,"%Y-%m") = "2021-10"
牛客网SQL--某东篇相关推荐
- 牛客网SQL 进阶篇刷题
牛客网SQL 进阶篇刷题(1-19) 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001,并在50分钟后提交,得了90分: 用户1002在2021年9月4日上午7点1分2秒开始 ...
- 牛客网sql题库(1-30题)—— 个人答案与过程解析
本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...
- 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库
牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...
- sql里查询一个组和组的用户数怎么查?_【牛客网SQL刷题】留存率怎么算?
抽空刷了牛客网SQL实战72题,最后几道以牛客网为例的题目还挺有挑战性,在此记录 统计时间段新用户次日留存率 每日的次日留存率 每日的新用户数 每日新用户的次日留存 求新登录用户次日留存 表login ...
- 牛客网SQL实战二刷 | Day10
「牛客网SQL实战二刷」是个系列学习笔记博文,今天解析7道SQL题目- 第55 - 61题. 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路.代码.相关参考资料/答疑) 回顾 ❤️「往期 ...
- 牛客网sql练习题解(22-32)
文章目录 简介 NO.22 NO.23 NO.24 NO.25 NO.26 NO.27 NO.28 NO.29 NO.30 NO.31 NO.32 简介 往期文章: 牛客网sql练习题解 (1-11) ...
- 牛客网sql练习题解(12-21)
文章目录 简介 NO.12 NO.13 NO.14 NO.15 NO.16 NO.17 NO.18 NO.19 NO.20 NO.21 简介 按时来更,感觉题目不是很难,不过我有一个感觉就是虽然题目简 ...
- 牛客网-SQL题库笔记
牛客网-SQL题库笔记 01.最晚入职员工的所有信息 02.查找入职员工时间排名倒数第三的员工所有信息 03.查找各个部门当前领导当前薪水详情以及其对应部门编号 04.查找所有已经分配部门的员工的la ...
- 牛客网sql练习打卡
目录 第一题 解题: 1.使用表的子连接 2.使用降序取第一个 第二题 解题: 1.降序取第三个 2.limit offset 3.子查询 2021/10/8 今天第一次开始尝试使用牛客网练习sql, ...
- 牛客网SQL实战二刷 | Day2
「牛客网SQL实战二刷」是个系列学习笔记博文,每天解析6道SQL题目- 今天是第7-12 题!该系列的其他博文,可在「我的博客」 中查看- 每篇笔记的格式大致为,三大板块: 大纲 题目(题目描述.思路 ...
最新文章
- matlab中,怎样把矩阵中所有的0改为2
- FreeSWITCH 学习笔记(一)
- 作为软件工程师,你必须知道的20个常识
- ERP选型 SAP PK Oracle
- pacemaker集群管理相关命令
- 中职学校计算机专业的论文,中职计算机论文范文2篇
- int main(argc,*argv)中argc,argv的相关说明
- eclipse开发cocos2dx 3.2环境搭建之一: Android C\C++环境搭建(ndk r9d)
- 计算机安全性无效无法连接到网络,图文研习windows10系统连接网络提示无法连接到此网络错误的方法?...
- java ftp获取文件夹大小,java 用FTPClient 下载文件时不显示总大小?解决方案
- maven java 参数_将Maven参数注入Java类
- 基于并行附加特征提取网络的SSD地面小目标检测模型
- 算法竞赛入门经典 例题6-6 小球下落(python、C)
- 多维数据库介绍【转】
- 人人皆知Python功能,你还不了解嘛?
- 毕设题目:Matlab机器人路径规划
- DEM高程数据下载方法
- c语言include iostream,求助,虚拟机上#includeiostream一直报错
- W5500以太网控制器芯片(一):ioLibrary库实现TCP服务器
- HTMl 实现用户的登录注册界面
热门文章
- 止损的意义是什么?我们为何要止损这个操作?
- git恢复误删代码或文件
- 硬件知识(二)无源RC二阶滤波电路
- 面向对象的3个基本对象
- 开根号的笔算算法图解_一个数的开根号怎么计算
- Apache安装和配置详细
- 智能制造 | 机器视觉系统,直击纺织行业人工质检痛点难点,提升缺陷检出精准度至99.9%
- JDBC--基础JDBC
- KeyError: ‘/home/xxx/anaconda3/lib/python3.8/site-packages/parso/python/grammar38.txt‘
- 前端复习之HTML5