数据分析师 ---- SQL强化(1)

news2024/12/23 10:15:10

文章目录

  • 数据分析师 ---- SQL强化(1)
    • 写在前面
    • 题目
    • 第一步:表连接以及表拼接
    • 第二步:新建列以及填充值
    • 总结

数据分析师 ---- SQL强化(1)

写在前面

最近在找工作中发现,数据分析师的笔试多数会涉及SQL,但是笔试中SQL的难度和我们在学习中和平常遇到的不是一个层次,笔试中的问题更加的贴近业务,对于应届生来说还是比较有难度的(也可能是我太菜)。
这个SQL专栏会记录自己在面试或者在刷题中遇到比较有价值的题目,希望能够帮助大家,也希望大家多多点赞和关注。

题目

请用一句SQL取出所有用户对商品的行为特征,特征分为已购买、购买未收藏、收藏未购买、收藏且购买

订单表:orders
在这里插入图片描述
收藏表:favorites
在这里插入图片描述
最后输出:
在这里插入图片描述

题意分析:
通过题目我们可以很清楚的知道这是一个多表连接的问题,连接两个表之后根据字段的内容进行判断
关于多表查询涉及的知识点
在这里插入图片描述

第一步:表连接以及表拼接

通过对题目的分析我们能够发现这是一个两个表全连接的问题,在Oracle数据库中可以直接进行全连接,但是在MySQL数据库则不支持全连接,我们可以考虑将两个查询的内容进行拼接union all关键字

	select o.user_id, o.item_id,o.pay_time,f.fav_time
	from orders o left join favorites f 
	on o.user_id = f.user_id and o.item_id = f.item_id
	UNION ALL
	select f.user_id, f.item_id,o.pay_time,f.fav_time
	from orders o right join favorites f 
	on o.user_id = f.user_id and o.item_id = f.item_id
	where o.user_id is null

在这里插入图片描述

解释拼接全连接代码中采用了左外连接和右内连接进行,因为这样查询的数据不会重复,直接使用union all进行合并
从优化的角度看使用union all 的效率会比union的效率高

第二步:新建列以及填充值

通过上表的查询我们能够发现可以根据付款的时间以及收藏的时间进行判断用户的购买和收藏情况

使用case when 进行区分

select distinct user_id,item_id,
case when pay_time is not null then 1 else 0 end '已购买',
case when pay_time is not null  and fav_time is null then 1 else 0 end '购买未收藏',
case when pay_time is null  and fav_time is not null then 1 else 0 end '收藏未购买',
case when pay_time is not null and fav_time is null then 1 else 0 end '收藏且购买'
from (
	select o.user_id, o.item_id,o.pay_time,f.fav_time
	from orders o left join favorites f 
	on o.user_id = f.user_id and o.item_id = f.item_id
	UNION ALL
	select f.user_id, f.item_id,o.pay_time,f.fav_time
	from orders o right join favorites f 
	on o.user_id = f.user_id and o.item_id = f.item_id
	where o.user_id is null
) tmp
order by user_id, item_id;

同样也可以只用if进行判断

select distinct user_id,item_id,
if(pay_time,1,0) '已购买',
if(pay_time is not null  and fav_time is null,1,0) '购买未收藏',
if(pay_time is null  and fav_time is not null,1,0) '收藏未购买',
if(pay_time is not null and fav_time is null,1,0) '收藏且购买'
from (
	select o.user_id, o.item_id,o.pay_time,f.fav_time
	from orders o left join favorites f 
	on o.user_id = f.user_id and o.item_id = f.item_id
	UNION ALL
	select f.user_id, f.item_id,o.pay_time,f.fav_time
	from orders o right join favorites f 
	on o.user_id = f.user_id and o.item_id = f.item_id
	where o.user_id is null
) tmp
order by user_id, item_id;

在这里插入图片描述

总结

这道题主要考察了多表查询,全外连接,union,union all,case when, 难点就是一开始不知道如何下手,不知道怎么将两个表的数据结合起来,也不知道怎么新增列,还可能只知道处理一个表中的数据。
其实在遇见这种题目的时候我们可以一步一步来,将问题拆解,先将两个表关联起来,后面在根据字段的情况在进行新增列。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443209.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载软件架构——闲聊几句AUTOSAR BSW(一)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人生是用来体验的,不是用来演绎完美的。我慢慢能接受自己身上那些灰暗的部分,原谅自己的迟钝和平庸,允许自己出错,允许自己偶尔断电,带着缺憾拼命绽放,…

Node【初识Node】

文章目录 🌟前言🌟Node.js🌟特性:🌟1. 单线程🌟2.异步IO🌟前端中的异步🌟Node中的异步 🌟3.跨平台🌟4.运行速度快 🌟 劣势:&#x1f3…

4/20~4/21两日总结

网络编程 socket通信 socket被翻译为套接字,通过socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据 如何实现呢 ServerSocket类能创建Socket的服务端,Socket能创建Socket的客户端 ServerSocket中…

如何运用数字孪生可视化技术实现三维可视化智慧园区

随着城市化的进程和信息化的发展,越来越多的城市拥有了智慧园区这一新的城市形态,通过“互联网”和物联网技术,实现了各种功能部门之间的信息共享与协同,提高了园区服务的质量和效率。然而,如何更好地实现园区管理和运…

LeetCode - 168. Excel表列名称

168. Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 二进制与十进制之间的转换 在做这题之前,先复习一下二进制与十进…

JUC并发编程之读写锁原理

1.图解流程 读写锁用的是同一个 Sycn 同步器,因此等待队列、state等也是同一个 t1 w.lock , t2 r.lock t1 成功上锁,流程与 ReentrantLock 加锁相比没有特殊之处,不同的是写锁状态占了 state 的低 16 位,而读锁使用…

多线程并发编程-线程篇

线程基础 什么是线程? 系统中的一个程序就是一个进程,每个进程中的最基本的执行单位,执行路径就是线程,线程是轻量化的进程。 什么是纤程? 绿色线程,由用户自己进行管理的而不是系统进行管理的&#xf…

【教程类】IDEA 打包 jar 包

最近有点累,写点简单的图文教程的东西来缓解一下 一、你需要知道的基础概念 了解了基础概念之后,可以让我们学习的更快更好哦 ~~ 1. jar JAR(Java Archive)是Java中一种常用的归档文件格式,也可以被视为一种压缩文…

学生就业统计表案例

主要分为三块: 渲染业务新增业务删除业务 一、根据持久化数据渲染页面 核心步骤: 读取localstorage 本地数据 如果有数据则转换为对象放到变量里面一会使用它渲染页面如果没有则用默认空数组 []为了测试效果,咱们可以先把initData 存入本地存储看效果…

android存储1--device解锁前的流程

android版本:android-11.0.0_r21http://aospxref.com/android-11.0.0_r21/ 一、主用户primary user的创建 开机后kernel启动第一个用户态进程init,init进程fork出zygote进程。zygote又fork出system server进程。http://aospxref.com/android-11.0.0_r2…

垃圾收集器面试总结(一)

垃圾收集器 Serial 收集器(GC日志标识:DefNew) Serial(串行)收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。 它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾…

[比赛简介]BirdCLEF-2023

比赛链接:BirdCLEF 2023 | Kaggle 比赛简介 鸟类是生物多样性变化的极好指标,因为它们具有高度流动性并且具有不同的栖息地要求。因此,物种组合和鸟类数量的变化可以表明恢复项目的成败。然而,经常在大面积地区进行传统的基于观…

你的车有通风座椅吗?新款奔驰S400升级原厂主副驾座椅通风

大家好,我是奔之升小志(bzs878),专注名车原厂升级,欢迎戳戳右上角“”号关注一下,持续为您带来精彩改装案例。 座椅通风有什么用?能改善身体与座椅接触面空气流通,达到不出汗的效果…

Linux网络服务----SSH

文章目录 一 、SSH服务1.1 什么是SSH服务器?1.2 常用的SSH软件的介绍 二 、ssh的运用2.1 存放ssh服务端的配置文件2.2 ssh在Linux中的密码登录2.3 利用ssh协议传输文件和获取文件2.4 sftp远程访问操作 三 、 ssh密钥登录操作四 、TCP_wapper的原理和运用4.1 TCP_wap…

IP-GUARD能否实现打印指定文件时需经过管理员审批后才能打印?

支持。先设置禁止打印文档的策略,然后设置相关审批流程,再给到客户端相应的申请权限: 1、在控制台-高级-打印控制策略中,给需要进行打印管控的客户端设置以下策略: 动作:禁止 2、在控制台-申请管理-桌面申请管理-审批流程管理中,添加申请类型为打印的审批流程,指定审批人…

通过ADB实现移动端h5项目无线真机调试(超级简单!)

前言 做移动端h5项目的时候,电脑浏览器调试样式和效果,可能和真机展示出来的效果有差距,比如有的手机开启了home键,比如文字大小等样式有偏差。虽然可以通过手机扫描网页二维码在手机上看样式,但是和真机还是有区别。…

每天一道大厂SQL题【Day23】华泰证券真题实战(五)

每天一道大厂SQL题【Day23】华泰证券真题实战(五) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…

Veritas 与星辰天合的官方一体化方案来了

11>2,XSKY星辰天合联手 Veritas 贡献企业数据管理最佳实践。 近日,XSKY星辰天合以“科技联盟伙伴”身份亮相 2023 Veritas Solution Day,并宣布与 Veritas 推出联合解决方案。双方将携手为大型企业客户带来业界领先的数据存储与保…

CDH中的MySQL升级(RPM包方式)

CDH中的MySQL升级(RPM包方式) 1.下载官网的5.7中最新的版本,地址:MySQL 5.7.41 rpm下载地址 2.解压下载的tar包:tar -xvf mysql-5.7.41-1.el7.x86_64.rpm-bundle.tar 3.备份数据库 3.1 先停止MySQL服务:sy…

【测试开发】第一节.测开入门(附常考面试题)

文章目录 前言 一、什么是测试开发 1.1 常考面试题 二、软件测试的基础概念 2.1 需求 2.2 测试用例 3、BUG 三、生命周期 3.1 软件的生命周期 3.2 软件测试的生命周期 四、软件工程中的几种常见的开发模型 4.1 瀑布模型 4.2 螺旋模型 4.3 增量模型和迭代模型 4.4 敏捷…