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

news2024/12/26 4:51:58

目录标题

      • 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())<=7
	group 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 rk
	from
		 (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 BY
 Produc

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.coloradmin.cn/o/787976.html

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

相关文章

大文件传输中的加密与安全措施

随着现代科技的不断发展&#xff0c;大文件传输已经成为了日常工作中不可或缺的一部分。但是&#xff0c;大文件传输中面临的安全问题也越来越凸显&#xff0c;因此加密与安全措施对于保护大文件传输的安全性至关重要。 一、密码学 密码学是加密与安全措施的基础&#xff0c;它…

ES6:Object.assign方法详解

ES6&#xff1a;Object.assign方法详解 1、前言2、语法3、基本用法3.1 目标对象和源对象无重名属性3.2 目标对象和源对象有重名属性3.3 有多个源对象3.4 其他情况3.4.1 只有一个参数时&#xff0c;Object.assign会直接返回该参数3.4.2 如果该参数不是对象&#xff0c;则会先转成…

[ 容器 ] Harbor 私有仓库的部署与管理

目录 一、什么是Harbor二、Harbor的特性三、Harbor的构成四、Harbor 部署五、关于 Harbor.cfg 配置文件中有两类参数&#xff1a;所需参数和可选参数六、维护管理Harbor 一、什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户…

centos7 基础设置

CentOS 7 是一种基于 Linux 操作系统的发行版&#xff0c;它是来自于 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码的重构版本。 CentOS 7 是由社区开发和维护的免费操作系统&#xff0c;被广泛应用于服务器环境和企业级应用。 CentOS 7 提供了稳定、安全且可…

OPTEE之静态代码分析实战三——optee_examples

ATF(TF-A)/OPTEE之静态代码分析汇总 一、optee_examples源码下载及分析 前文分别对optee_os和optee_client进行了静态代码分析实战,本次对optee_examples实施soanrlint静态代码分析,先到官方网站下载源码。官方网站位于github,网址optee_examples。 各发布版本如下…

windows下nginx更改配置unknown directive踩坑填坑

windows下nginx更改配置踩坑填坑 windows下nginx大坑&#xff1a;首先笔者建议了使用路径下cmd的方式启动服务&#xff0c;由于笔者更改了nginx配置文件&#xff0c;重新加载启动&#xff08;命令nginx -s reload&#xff09;nginx后一直报错&#xff0c;采用双击启动&#xff…

国际化(i18n)

国际化(i18n) 概述 i18n&#xff08;其来源是英文单词 internationalization的首末字符i和n&#xff0c;18为中间的字符数&#xff09;是“国际化”的简称。在信息技术领域&#xff0c;国际化与本地化&#xff08;英文&#xff1a;internationalization and localization&…

STM32 互补PWM 带死区 HAL

1、设置PWM波频率100KHz&#xff0c;占空比50%&#xff0c;死区时间1us 2、 while 循环之前启动PWM HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //启动TIM1_CH1 PWM输出 HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//启动TIM1_CH1N PWM输出 3、死区计算 DT_time…

基于Jquery EasyUI JSZip FileSaver的简单使用

一、前言 在前端的项目开发中 &#xff0c;下载文件压缩包是很重要的一个环节&#xff0c;那么怎么下载多个文件并压缩成ZIP下载呢&#xff1f; 二、使用步骤 1、引用库 <script type"text/javascript" src"~/Scripts/comm/jszip.min.js" ></…

draw.io画图时,用一个箭头(线段)连结一个矩形和直线时,发现,无论怎么调节,都无法使其无缝连接。

问题描述&#xff1a;draw.io画图时&#xff0c;用一个箭头&#xff08;线段&#xff09;连结一个矩形和直线时&#xff0c;发现&#xff0c;无论怎么调节&#xff0c;都无法使其无缝连接。要么少一段&#xff0c;如图1所示。要么多一段&#xff0c;如图2所示。 图1&#xff0c…

国标GB28181监控设备接入EasyCVR如何正确获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…

数据结构之优先级队列(堆)

文章目录 1.优先级队列概念 &#x1f4ae;2.优先级队列的模拟实现&#x1f4ae;3.常用接口PrinrityQueue介绍&#x1f4ae;4.堆的应用&#x1f4ae; 1.优先级队列概念 &#x1f4ae; 优先级队列 &#xff1a;是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优…

Linux —— 进程地址空间

目录 一&#xff0c;虚拟地址 二&#xff0c;进程地址空间 一&#xff0c;虚拟地址 #include<stdio.h> #include <unistd.h> #include <stdlib.h> int g_val 0; int main() {pid_t id fork();if(id<0) …

聊聊STM32的基本定时器

STM32 的基本定时器&#xff08;Basic Timer&#xff09;是一种简单的定时器模块&#xff0c;用于生成基于时钟频率的定时中断。它可以用于实现各种定时和计时功能&#xff0c;例如延时、频率测量、PWM 生成等。 基本定时器通常由一个 16 位的自由运行计数器和一个预分频器组成…

VMware InstallBuilder Crack

VMware InstallBuilder Crack VMware InstallBuilder是一种开发工具&#xff0c;用于构建桌面和服务器软件的跨平台安装程序。使用InstallBuilder&#xff0c;您可以从单个项目文件和构建环境中快速创建Linux、Windows、Mac OS X、Solaris和其他平台的动态专业安装程序。除了安…

虚拟机安装红帽8/9问题解决方案

虚拟机安装红帽8/9问题解决方案 导入虚拟机文件&#xff0c;开启虚拟机。 会直接进入Redhat Debug 此平台不支持虚拟化的 AMD-V/RVI。 不使用虚拟化的 AMD-V/RVI&#xff0c;是否继续? 解决方案&#xff1a; 首先确保PC是开启VT-x&#xff08;Inter&#xff09;&#xff0…

Docker Compose 实现单机容器集群编排管理

目录 Docker ComposeDocker Compose 三大概念1. Docker Compose 环境安装2. YAML 文件格式及编写注意事项3. Docker Compose配置restart 设置重启策略&#xff0c;no&#xff0c;always&#xff0c;no-failure&#xff0c;unless-stopped 4. Docker Compose 常用命令选项5. Doc…

消息队列(一)-- RabbitMQ入门(2)

发布确认 发布确认原理 生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在该信道上面发布的消息都将会被指派一个唯一的 ID&#xff08;从1开始&#xff09;&#xff0c;一旦消息被投递到所有匹配的队列之后&#xff0c;broker 就会发…

蓝桥杯省赛真题——最少刷题数

2022年第13届省赛&#xff0c;蓝桥杯真题。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&…

【前端知识】React 基础巩固(三十三)——Redux的使用详解

React 基础巩固(三十三)——Redux的使用详解 Redux的使用详解 针对React 基础巩固&#xff08;三十二&#xff09;中的案例&#xff0c;我们希望抽取页面中共有的代码&#xff08;例如下方的代码&#xff09;&#xff0c;使用高阶组件统一拦截。 constructor() {super();this.…