SQL经典面试题




根据如下订单表orders的字段和类型,按要求写出满足条件的SQL语句:

order_iduser_idproduct_idpaid_timeis_refunded
1001123A2023-10-24 11:14:070
1002123B2023-10-25 18:03:240
1003234C2023-11-11 00:03:321
1004456D2023-11-11 01:10:010
1005234A2023-12-20 16:09:501
1006456B2023-12-21 17:24:120
1007123A2023-12-31 15:20:210
1008234C2023-12-31 19:13:300

字段说明:

  • order_id:订单ID,String类型
  • user_id:用户ID,String类型
  • product_id:商品ID,String类型
  • paid_time:付款时间,String类型
  • is_refunded:是否退款,1表示退款,0表示未退款,Bigint类型

1、数据准备

create table orders (order_id string,user_id string,product_id string,paid_time string,is_refunded bigint
);insert into orders values
('1001', '123', 'A', '2023-10-24 11:14:07', 0),
('1002', '123', 'B', '2023-10-25 18:03:24', 0),
('1003', '234', 'C', '2023-11-11 00:03:32', 1),
('1004', '456', 'D', '2023-11-11 01:10:01', 0),
('1005', '234', 'A', '2023-12-20 16:09:50', 1),
('1006', '456', 'B', '2023-12-21 17:24:12', 0),
('1007', '123', 'A', '2023-12-31 15:20:21', 0),
('1008', '234', 'C', '2023-12-31 19:13:30', 0);select * from orders order by order_id;

2、题目描述与题解

1) 查询购买过每种商品的总人数(不限时间、退款与否)

select product_id,count(distinct user_id) cnt from orders group by product_id

结果如下:

product_idcnt
A2
D1
B2
C1

2) 查询2023-11-01及之后购买过商品C超过1次的用户(不限退款与否)

select user_id,count(1) cnt 
from orders where substr(paid_time, 0, 11) >= '2023-11-01' and product_id='C' 
group by user_id having cnt>1

结果如下:

user_idcnt
2342

3) 查询2023-11-01及之后每天的总订单数和退款率

-- 方式1
select substr(paid_time, 0, 11) dt,count(order_id) nums,count(case when is_refunded=1 then is_refunded end)/count(is_refunded) refund_rate
from orders where substr(paid_time, 0, 11) >= '2023-11-01' 
group by substr(paid_time, 0, 11)-- 方式2
select substr(paid_time, 0, 11) dt,count(order_id) nums,count(case when is_refunded=1 then 1 end)/count(is_refunded) refund_rate
from orders where substr(paid_time, 0, 11) >= '2023-11-01' 
group by substr(paid_time, 0, 11)-- 方式3(注意:if(is_refunded='1',1)不能正确计算)
select substr(paid_time, 0, 11) dt,count(order_id) nums,count(if(is_refunded=1, is_refunded))/count(is_refunded) refund_rate
from orders where substr(paid_time, 0, 11) >= '2023-11-01' 
group by substr(paid_time, 0, 11)

结果如下:

dtnumsrefund_rate
2023-11-1120.5
2023-12-3120.0
2023-12-2011.0
2023-12-2110.0

4) 查询日退款率前3的商品及对应退款率(不限时间)

select substr(paid_time, 0, 11) dt,count(if(is_refunded=1, is_refunded))/count(is_refunded) refund_rate
from orders group by substr(paid_time, 0, 11) order by refund_rate desc limit 3

结果如下:

dtrefund_rate
2023-12-201.0
2023-11-110.5
2023-10-240.0

5) 查询每个用户购买每种商品的最后一次未退款的记录(结果仅包含表中字段)

-- 方式1
select order_id,user_id,product_id,paid_time,is_refunded from (select *,row_number() over(partition by user_id,product_id order by paid_time desc) rk from orders where is_refunded=0
) t where t.rk=1-- 方式2
select order_id,user_id,product_id,paid_time,is_refunded from (select *,first_value(paid_time) over(partition by user_id,product_id order by paid_time desc) last_paid_time from orders where is_refunded=0
) t where t.paid_time=t.last_paid_time

结果如下:

order_iduser_idproduct_idpaid_timeis_refunded
1008234C2023-12-31 19:13:300
1006456B2023-12-21 17:24:120
1004456D2023-11-11 01:10:010
1007123A2023-12-31 15:20:210
1002123B2023-10-25 18:03:240

以上SQL若存在错误或者大家有更好的方案,欢迎交流和指正


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具: 面板显示:工具包含一个面板,用于展示软件的不同版本信息。版本信息:面板上显示主版本号、当前版本号和子版本号。版本控制功能…

单目行车测距摄像系统(单目测距-行车)

单目行车测距摄像系统是一种利用单个摄像头实现车辆行驶中前方障碍物距离测量的技术。该系统通过计算机视觉算法,能够实时分析摄像头捕捉的图像,精确计算出车辆与前方物体之间的距离,对于自动驾驶、高级驾驶辅助系统(ADAS&#xf…

【探索Linux】P.36(传输层 —— TCP协议段格式)

阅读导航 引言一、TCP段的基本格式二、控制位详细介绍三、16位接收窗口大小⭕窗口大小的作用⭕窗口大小的限制⭕窗口缩放选项⭕窗口大小的更新⭕窗口大小与拥塞控制 四、紧急指针温馨提示 引言 在上一篇文章中,我们深入探讨了一种无连接的UDP协议,它以其…

《新华日报》理论版报刊简介及投稿邮箱

《新华日报》理论版报刊简介及投稿邮箱 《新华日报》是中国共产党在抗日战争时期和解放战争初期创办的大型机关报,1949 年 4 月在南京复刊,1952 年成为中国共产党江苏省委机关报,现为中共江苏省委直属事业单位。 该报纸的理论版(…

记录前端发现问题之 mock接口无返回数据导致所有后续接口调用报错:网络异常

1. 背景 就更新了代码,发现新涉及的页面,切换tab 之后会报错网络异常,再次切换其他没涉及的功能页面,继续报错网络异常 测试环境:纯前端代码,后端是前端mock的数据,仅供demo 2. 问题报错 手动…

开箱机视觉系统大揭秘:如何轻松辨别千差万别的包装?

在现代物流仓储领域,开箱机作为提升作业效率的关键设备,正日益受到行业的重视。而开箱机的视觉系统更是其十分强大,能够准确辨认不同包装,确保物流作业的高效与准确。与星派深入探究一下开箱机视觉系统是如何工作的,以…

女生读中职,选择什么专业最吃香!

自《国家职业教育改革实施方案》颁布实施以来,中国职业教育的改革和发展已取得显著进展。目前,我国已建立起世界上规模最大的职业教育体系,中高职学校每年培养约1000万高素质技术技能人才,职业教育实现了历史性的跨越。对于那些不愿加入“千军万马过独木桥”的高考竞争大军,初中…

Firewalld防火墙基础

Firewalld 支持网络区域所定义的网络连接以及接口安全等级的动态防火墙管理工具 支持IPv4、IPv6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种配置模式 运行时配置:临时生效,一旦重启或者重载即不生效 永久配置&#xff1a…

华三多台交换机堆叠配置(环形组网)

组网架构 配置步骤 SW1的配置: irf member 1 priority 32 设置master的优先级为32 interfacec range Ten-GigabitEthernet1/0/49 to Ten-GigabitEthernet1/0/50 shutdown 关闭上述接口(将其加入到堆叠口之前需要关闭,否则无法加入&a…

机器学习 - 实现KNN对图像有监督学习的 分类算法 (一)【原理】

一、KNN算法介绍: KNN 算法,或者称 k最邻近算法,是 有监督学习 中的 分类算法 。它可以用于分类或回归问题,但它通常用作分类算法。 KNN (K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一…

“不喝鸡汤 不诉离殇”华火电燃灶用实力引领烹饪灶具发展

在这个快节奏的时代,我们常常被各种厨房电器的鸡汤所包围,并悄悄的告诉我们厨房生活是美好与温暖的,但面对现实中的挑战与困难时,常常表现出选择性失明;那些隐藏在传统厨房烹饪环境下的危机,就像是慢性的毒…

[Python学习篇] Python函数

定义函数 语法:使用关键字 def def 函数名(参数): 代码1 代码2 ...... 调用函数 语法: 函数名(参数) 注意:不同的需求,参数可有可无。在Python中,函数必须先定义后使用 示例: # 定义函数 d…

华为仓颉编程语言

目录 一、引言 二、仓颉编程语言概述 三、技术特征 四、应用场景 五、社区支持 六、结论与展望 一、引言 随着信息技术的快速发展,编程语言作为软件开发的核心工具,其重要性日益凸显。近年来,华为公司投入大量研发资源,成功…

小白学python(第三天)

小伙伴,大家好呀,昨天的内容吸收的好?昨天有小伙伴私信我,建议我在博文中加点练习题,可以看出这位童鞋很想学好这门语言哈,那我也尽量满足大家的要求。 从控制台输入 语法格式: 变量名 input…

C++基础(三):C++入门(二)

上一篇博客我们正式进入C的学习,这一篇博客我们继续学习C入门的基础内容,一定要学好入门阶段的内容,这是后续学习C的基础,方便我们后续更加容易的理解C。 目录 一、内联函数 1.0 产生的原因 1.1 概念 1.2 特性 1.3 面试题 …

深入了解Qt 控件:Display Widgets部件(1) 以及 QT自定义控件(电池)

QT自定义控件(电池) 在线调色板Qt之CSS专栏Chapter1 QT自定义控件(电池)Chapter2 Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)1 Display Widgets简介2 如何使用Display Widgets部件 Chapter3 Qt自定义控件电池组件使用前言一、最基…

告别熬夜改稿:AI降重工具让论文降重变得轻松又有趣

已经天临五年了,大学生们还在为论文降重烦恼……手动降重确实是个难题,必须要先付点小经费去靠谱的网站查重,再对着红字标注去改,后面每一次的论文呢查重结果都像赌//博,谁也不知道明明是同一篇文章,第二次…

Linux:系统引导过程与服务控制

目录 一、linux 系统引导过程 1.1、引导过程总览 1.2、系统初始化进程 (centos 6和7 的区别) 1.2.1、centos 6 的引导过程 init 进程 1.2.2、centos 7(systemd进程) 二、MBR、GRUB菜单、忘记密码故障修复 2.1、修复MBR扇区故障 模拟故障 重启…

IT行业入门,如何假期逆袭,实现抢跑

目录 前言 1.IT行业领域分类 2.基础课程预习指南 3.技术学习路线 4.学习资源推荐 结束语 前言 IT(信息技术)行业是一个非常广泛和多样化的领域,它包括了许多不同的专业领域和职业路径。如果要进军IT行业,我们应该要明确自己…