可供参考的解题思路:根据用户ID和日期进行分组,通过统计用户在各购买渠道购物的记录个数来判断某用户在某日期购物时采用的访问方式(web、app和both)。其中,web和app可以通过一个SELECT语句查询,both则可以通过另一个SELECT语句查询。将两部分使用UNION连接在一起,并将以上部分作为子查询内部,在子查询外部统计不同购买日期、购买渠道的总购买金额和总购买用户。
本部分SQL代码如下:
SELECT purchase_date
,channel
,SUM(sum_amount) sum_amount
,SUM(total_users) total_users
FROM
(
SELECT purchase_date
,MIN(channel) channel
,SUM(purchase_amount) sum_amount
,COUNT(DISTINCT user_id) total_users
FROM purchase_channel
GROUP BY purchase_date
,user_id
HAVING COUNT(DISTINCT channel) = 1 UNION
SELECT purchase_date
,'both' channel
,SUM(purchase_amount) sum_amount
,COUNT(DISTINCT user_id) total_users
FROM purchase_channel
GROUP BY purchase_date
,user_id
HAVING COUNT(DISTINCT channel) > 1
) c
GROUP BY purchase_date
,channel;
本部分输出结果如下图所示。
上述部分似乎已经完成了本题要求,但仔细观察就会发现,题目要求即使某天某渠道没有用户的购买信息,也需要展示。而想要展示更全的信息,则考虑使用最全的信息(所有日期和3个渠道的笛卡尔积)与刚查询出的结果数据表进行LEFT JOIN连接,即可得到两张表根据日期和渠道进行连接的结果。
涉及知识点:UNION、分组聚合、数据去重。
本题的SQL代码如下,供读者参考:
SELECT t1.purchase_date
,t1.channel
,t2.sum_amount
,t2.total_users
FROM
(
SELECT DISTINCT a.purchase_date
,b.channel
FROM purchase_channel a,
(
SELECT "app" AS channel
UNION
SELECT "web" AS channel
UNION
SELECT "both" AS channel
) b
) t1
LEFT JOIN
(
SELECT
purchase_date,
channel,
SUM(sum_amount) sum_amount,
SUM(total_users) total_users
FROM (
SELECT purchase_date
,MIN(channel) channel
,SUM(purchase_amount) sum_amount
,COUNT(DISTINCT user_id) total_users
FROM purchase_channel
GROUP BY purchase_date,user_id
HAVING COUNT(DISTINCT channel) = 1
UNION
SELECT purchase_date
,'both' channel
,SUM(purchase_amount) sum_amount
,COUNT(DISTINCT user_id) total_users
FROM purchase_channel
GROUP BY purchase_date,user_id
HAVING COUNT(DISTINCT channel) > 1
)c GROUP BY purchase_date, channel
) t2
ON t1.purchase_date = t2.purchase_date AND t1.channel = t2.channel;
这些题目你做出了么?
本文题目内容摘自最新出版的《SQL数据分析:从基础破冰到面试题解》,该书包含大量练习题(共48个),并附带数据导入和参考解析代码,更多题目见下图:
常见疑问和解答
1. 没有基础可以学吗?
可以,本书从环境搭建开始,从基础入门到进阶,然后通过题目实战提升SQL能力,是一本关于SQL 数据分析的实战手册。
2. 本书对比市面上大部分SQL书籍的特色是什么?
将数据分析挖掘中所需的SQL能力抽出来专门写,不会涉及很多不常用的功能语法,由浅入深,并配套大量练习题(可作为求职笔试面试的练习题),每个练习题都配有数据导入、解题思路和参考答案。练习题会结合当前数据分析很多场景需求来编制,例如“活跃用户分析”、“连续登录用户分析”、“社区团购行为分析”、“商品销量同环比”。
3. 本书适合数据分析相关岗位求职备考准备么?
很适合,本书展现了数据分析工作的日常内容,给出了数据分析岗位的工作技能要求,然后讲述了数据分析笔试与面试中对SQL 的考查知识点。通过3种难度的题目练习,能提升求职能力并达到初级数据分析挖掘岗位对SQL的能力要求。
4. 本书的适合什么样的读者?
- 数据分析与数据开发求职者和从业者
- 计算机科学与技术、统计学、数学、大数据、人工智能、数据科学相关专业的师生
- 对数据分析和SQL感兴趣人群
- 转行做数据分析与数据开发的人员
福利
大家如果经常买书都会知道,新书刚出版上市是没有什么折扣的。
本次给大家申请到了全网最低价福利,原价89元,现在只要49元包邮。
大家可以扫描下方二维码或者点击阅读原文直接购买。