数分面试题-SQL常见面试题型1

目录标题

      • 1、连续时间问题
        • 1.1 最近一周内的活跃天数
        • 1.2 每个用户一周内最大连续活跃天数
        • 1.3 计算截至当前,每个用户已经连续签到的天数
      • 2、时间间隔问题举例
      • 3、sql窗口分析函数
        • 3.1 有一个日志登陆列表,获取用户在某个页面停留时长
        • 3.2 寻找至少连续出现3次的数字
      • 4、什么是关系型“数据表”“数据库”
      • 5、行/列转换
        • 5.1 行转列,表1转表2--PIVOT
        • 5.2 列转行,表2转表1
        • 5.3 一行转多行

1、连续时间问题

在这里插入图片描述

1.1 最近一周内的活跃天数

最近一周:timestampdiff(day,time,now())<=7
group by 可以起到去重的作用

select user_id,count(1)
from(select user_id,date from t where timestampdiff(day,time,now())<=7group by user_id,date)
group by user_id

1.2 每个用户一周内最大连续活跃天数

思路:排序-减去-- 计数
date_sub(日期,天数)

select user_id,max(count(diff))
from
(select date ,user_id,date_sub(date,rank) as diff
from(select date ,user_id ,row_number()over(partition by user_id order by date) as rkfrom(select date ,user_id from t group by date ,user_id))
)	
group by user_id

时间差函数:
1,timestampdiff(second/minute/hour/day,开始日期,结束日期)
2,date_sub(日期,天数) 日期减去天数

在这里插入图片描述

1.3 计算截至当前,每个用户已经连续签到的天数

每一个日期都有
思路:选出最新没签到的日子,用当前时间减去该日子得到已经连续签到的次数

select user_id,timestampdiff(Day,el,now()) as contdays
from(select user_id,max(date) el from user_attendence where is_sign_in =0 group by user_id)

2、时间间隔问题举例

1、为日期排序
· -row number() partition by 用户编号 order by 操作时间 as 日期排序
2、错位相减,求日期和排序的差值(diff)
· 用错位相减求来实现“相邻”要求
from a left join b on (a.日期排序 = b.日期排序-1)

3、sql窗口分析函数

lag:用于统计窗口内往上第n行值
lead:用于统计窗口内往下第n行值
lag 和 lead 有三个参数,第一个参数是列名,第二个参数是偏移的 offset,第三个参数是超出记录窗口时的默认值。

lag(列名,1,0) over (partition by 分组列 order by 排序列 rows between
开始位置 preceding and 结束位置 following)

3.1 有一个日志登陆列表,获取用户在某个页面停留时长

在这里插入图片描述
代码:

select userid,time,
unix_timestamp(lead(time,1) over(partition by userid order by time),'yyyy-MM-dd HH:mm:ss')- unix_timestamp(time,'yyyy-MM-dd HH:mm:ss') as period
,url
from user_log

3.2 寻找至少连续出现3次的数字

在这里插入图片描述
思路:增加两列,使用 lag 函数-把下面的数据往上错位一个,错位 2 个,判断 num 和错位的两列是否相等

select id,distinct num
from
(select id,num,
lag(num,1)over(partition by id) as lag1,
lag(num,2)over(partition by id) as lag2
from log_table
) a
where num = lag1 and lag1 = lag2

4、什么是关系型“数据表”“数据库”

数据分成结构化数据、非结构化数据,数据库又常分成关系型数据库和非关系型数据库

结构化数据:可以用excel存储的,一行行一列列数据
非结构化数据:图片、文字、语音这种没办法用 excel 存储的,一行行一列列的数据

关系型数据库:需要预先设计好存储的strcture
非关系型数据库:可以预先设计好structure进行结构化存储,也可以在数据不满足structure的情况下先行存储数据,待后来再进行格式化打标签

结构化查询语言SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统

5、行/列转换

4款产品,三个电商平台,分别以两种形式记录了某个月各产品在各个平台的销售数量
表1:
在这里插入图片描述
表2:
在这里插入图片描述

5.1 行转列,表1转表2–PIVOT

在 SQL SERVER 中,提供了专门进行行列转换的函数:PIVOT
pivot的语法:

from table_source
pivot(
聚合函数(value_column) - value_column 要转换为列值的列名
for pivot_column  - pibot_column指定要转换的列
in(column_list) ----column_list自定义的目标列名
)
SELECT Product,MAX(CASE WHEN Platform = ‘ 天猫 ’ THEN quantity ELSE 0 
END) AS “ 天猫 ”,MAX(CASE WHEN Platform = ‘ 淘宝 ’ THEN quantity ELSE 0 
END) AS “ 淘宝 ”,MAX(CASE WHEN Platform = ‘ 京东 ’ THEN quantity ELSE 0 
END) AS “ 京东 ”
FROM TABLE
GROUP BYProduc

5.2 列转行,表2转表1

方法一:UNPIVOT
UNPIVOT 的一般语法是:
在这里插入图片描述

FROM table_source – 表名称,即数据源
UNPIVOT(
value_column – value_column 要转换为 行值 的列名
FOR pivot_column – pivot_column 指定要转换为指定的列
IN(column_list ) – column_list 目标列名
)
SELECT *
FROM TABLE UNPIVOT (quantity FOR Platform IN (“ 天猫 ”, “ 淘
宝 ”, “ 京东 ”))

方法二:聚合函数+UNION
同理,Oracle,MySQL 也是不支持 UNPIVOT 函数的,对于这种情况我们可以通过聚合函数+UNION 的方式将数据组合起来。

5.3 一行转多行

在这里插入图片描述
一行转多行:

SELECT DISTINCT Product,Supplier
FROM table
LATERAL VIEW explode (split(Supplier,,)) as t – t 为新表别名

多行转一行:
可以使用:collect_set +concat_ws 来实现

SELECT Product,concat_ws(,, COLLECT_SET(Supplier)) Product_Supplier
FROM TABLE
GROUP BY  Product

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

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

相关文章

【Docker】Docker容器编排

目录 一、Docker Compose1.2Docker Compose 环境安装1.3 YAML 文件格式及编写注意事项2.3 Docker Compose配置常用字段2.4 Docker Compose 常用命令 二、Docker Compose实验2.1编写Nginx的Dockerfile脚本2.2编写MySQL&#xff0c;Dockerfile脚本2.3编写PHP&#xff0c;Dockerfi…

K8S中网络如何通信

Kubernetes 提出了一个自己的网络模型“IP-per-pod”&#xff0c;能够很好地适应集群系统的网络需求&#xff0c;它有下面的这 4 点基本假设&#xff1a; 集群里的每个 Pod 都会有唯一的一个 IP 地址。Pod 里的所有容器共享这个 IP 地址。集群里的所有 Pod 都属于同一个网段。…

STM32MP157驱动开发——按键驱动(POLL 机制)

文章目录 “POLL ”机制&#xff1a;APP执行过程驱动使用的函数应用使用的函数pollfd结构体poll函数事件类型实现原理 poll方式的按键驱动程序(stm32mp157)gpio_key_drv.cbutton_test.cMakefile修改设备树文件编译测试 “POLL ”机制&#xff1a; 使用休眠-唤醒的方式等待某个…

MySQL主从复制、读写分离

目录 一、MySQL的复制类型 二、MySQL主从复制工作流程 三、MySQL的同步方式 1、异步复制&#xff08;Async Replication&#xff09; 2、同步复制&#xff08;sync Replication&#xff09; 3、半同步复制&#xff08;Async Replication&#xff09; 四、MySQL应用场景 …

TCP/IP 五层协议模型

转载大佬文章 我们每天使用互联网&#xff0c;本质上是在传输/接收各种数据&#xff0c;具体如何传输则是按照一系列互联网协议进行的。我们常说的网络七层模型&#xff0c;五层模型&#xff0c;四层模型都是对数据传输过程做了细化的分层。 按照五层模型比较好理解&#xff0c…

操作系统启动相关概念(BIOS、MBR、GPT、BRUB)

不管是 Windows 还是 Linux 操作系统&#xff0c;底层设备一般均为物理硬件&#xff0c;操作系统启动之前会对硬件进行检测&#xff0c;然后硬盘引导启动操作系统&#xff0c;如下为操作系统启动相关的各个概念。 一、BIOS 基本输入输出系统&#xff08;Basic Input Output Sy…

基于Java+SpringBoot+vue前后端分离校园周边美食探索分享平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

opencv-19 图像色彩空间转换函数cv2.cvtColor()

cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在 Python 中&#xff0c;你可以使用这个函数来实现不同色彩空间之间的转换。 函数的基本语法为&#xff1a; cv2.cvtColor(src, code[, dst[, dstCn]])参数…

leetcode5. 最长回文子串(Manacher - java)

Manacher回文算法 leetcode5. 最长回文子串Manacher 算法 manacher 算法 leetcode5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s “…

搭建关键字驱动自动化测试框架

前言 上篇文章我们已经了解到了数据驱动自动化测试框架是如何构建和驱动测试的&#xff01;那么这篇文章我们将了解关键字驱动测试又是如何驱动自动化测试完成整个测试过程的。关键字驱动框架是一种功能自动化测试框架&#xff0c;它也被称为表格驱动测试或者基于动作字的测试…

Windows10 下 Neo4j1.5.8 安装教程

前言 Neo4j 是一个高性能的、NOSQL 图形数据库&#xff0c;它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的 Java 持久化引擎&#xff0c;这里就不把他和常用关系型数据库做对比了。因为篇幅有限&#xff0c;我这里也是第一次使用&#xff0c;所以以…

elasticsearch报错问题

标题1.报错问题 标题2.新建一个配置类 package cn.itcast.hotel.config;import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import o…

【Linux】Tcp协议的通讯流程,浅谈三次握手四次挥手

文章目录 Tcp协议的通讯流程一、协议定制与网络版计算器的实现二、json的使用总结 Tcp协议的通讯流程 上一篇文章我们讲解了如何实现Tcp服务器&#xff0c;Tcp的接口也用了&#xff0c;下面我们就看一下Tcp协议的通讯流程&#xff1a; 在服务端&#xff0c;我们首先要创建一个…

电脑C盘空间大小调整 --- 扩容(扩大/缩小)--磁盘分区大小调整/移动

概述&#xff1a; 此方法适合C盘右边没有可分配空间&#xff08;空闲空间&#xff09;的情况&#xff0c;D盘有数据不方便删除D盘分区的情况下&#xff0c;可以使用傲梅分区助手软件进行跨分区调整分区大小&#xff0c;不会损坏数据。反之可直接使用系统的磁盘管理工具进行调整…

Flutter学习—— Vscode创建项目

目录 一、Vscode创建项目 二、补充五种项目类型 Application: Module 模块开发&#xff0c; Package开发 Plugin 插件开发 Skeleton 骨架开发 一、Vscode创建项目 1.快捷键 CtrlShiftP 打开命令面板&#xff0c;选择新项目 2.选择需要开发的项目类型 Application 应用开…

Tomcat 的使用(图文教学)

Tomcat 的使用&#xff08;图文教学&#xff09; 前言一、什么是Tomcat&#xff1f;二、Tomcat 服务器和 Servlet 版本的对应关系三、Tomcat 的使用1、安装2、目录介绍3、如何启动4、Tomcat 的停止5、如何修改 Tomcat 的端口号6、如何部暑 web 工程到 Tomcat 中6.1 方式一6.2 …

红队打靶:Nullbyte打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现与端口扫描 第二步&#xff1a;Web渗透 第三步&#xff1a;hydra密码爆破 第四步&#xff1a;SQL注入大赏 方法一&#xff1a;手工SQL注入之联合查询 方法二&#xff1a;SQL注入写入一句话木马 方法三&#xff1a;SQL注入写入…

C语言学习笔记 VScode设置C环境-06

目录 一、下载vscode软件 二、安装minGW软件 三、VS Code安装C/C插件 3.1 搜索并安装C/C插件 3.2 配置C/C环境 总结 一、下载vscode软件 在官网上下载最新的版本 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 二、安装minGW…

测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录 前言&#xff1a; 简介 基础使用方式介绍 工具特性 前言&#xff1a; 在软件开发中&#xff0c;测试覆盖率是一个非常重要的指标&#xff0c;它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法&#xff0c;它可以对 JVM 字节码进…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM&#xff1a;长短期记忆网络&#xff08;Long-short-term-memory&#xff09;,能够记住长句子的前后信息&#xff0c;解决了RNN的问题&#xff08;时间间隔较大时&#xff0c;网络对前面的信息会遗忘&#xff0c;从而出现梯度消失问题&#xff0c;会形成长期依赖…