首页 > 数据库 >SQL面试题

SQL面试题

时间:2023-07-27 13:55:04浏览次数:54  
标签:面试题 temp user SQL date input id select

  1. 找出连续7天登陆的用户

该问题可衍生解决如下常见的业务场景:

  1. 求出连续登录7天的用户/用户数
  2. 求出连续充电次数大于等于12次的用户数
  3. 求出连续3年获得冠军的选手
  4. ......
    步骤1:去重。每个用户每天只保留一次登录记录
select distinct user_id, date from input

步骤2:开窗函数。对每一个客户,按照时间进行排序

select *, row_number() over (partition by user_id order by date) as `rank`  from input

步骤3:计算date-rank的日期

select *, date_sub(date, rank) as `temp_date`  from input

步骤4:以客户和 temp_date字段为主键进行分组,计算条目数,条目数大于等于7的,即为连续登录7天

select  user_id, temp_date,count(*) from input
group by user_id, temp_date
having count(*) >= 7

综上:

select  user_id, temp_date,count(*) 
from (
	-- 计算基准时间
	select *, date_sub(date, rank) as `temp_date`  
	from (
		-- 排序
		select *, row_number() over (partition by user_id order by date) as `rank`  
		from (
   			 -- 去重
			select distinct user_id, date from input
			 )
		)
	)
group by user_id, temp_date
having count(*) >= 7
  1. 最大连续天数的变形问题 。求连续点击三次的用户数,中间不能有别人的点击
select user_id, diff, count(*) 
from (
	select *, (rank1-rank2) as `diff` 
	from (
		select *
			, row_number() over (order by date )  as `rank1`
        	, row_number() over (partition by user_id order by date )  as `rank2`
		from input
		)
	)
group by user_id, diff
having count(*) >= 3
  1. 电商公司用户访问时间数据,某个用户连续的访问记录如果时间间隔小于 60 秒,则分为同一个组。

标签:面试题,temp,user,SQL,date,input,id,select
From: https://www.cnblogs.com/tian1022/p/17584728.html

相关文章

  • MySQL学习笔记
    一、SQLSQL语句通用语法SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。注释:单行注释:--注释内容或#注释内容(MySQL特有)多行注释:/*注释内容*/SQL分类DDL:DataDe......
  • mysql根据字符截取字符串
    mysql根据字符截取字符串(总结)1.1前言SUBSTRING_INDEX1.2需要实现的实际需求如下表为文档目录表,其中关键字段dir_seq为目录层级索引,dir_name为目录名称。假设现在我们获取到dir_seq值为.341.346.347.348.,现在我们想获取到各级别的目录主键。1.3截取一级目录主键步骤一:SUB......
  • Databricks Cluster vs SQL Warehouses - SuperOutlier
    Forward:https://www.superoutlier.tech/databricks-cluster-vs-sql-warehouses/ IfyouareusingaDatabrickspremiumaccount,youseeSQLpersonalalongwithDataEngineeringandMachineLearning.IfyouareusingDataEngineeringorMachineLearning,yo......
  • mysql当一个字段以逗号隔开存多个名字,用sql取这个名字对应的id并修改
    当前有两个表,class班级表和student学生表  需求:我们需要把class班级表的student_ids中的name,改成student的id这里我们可以用“find_in_set”函数--注意s.name要在前面selectc.id,c.CLASS_NAME,GROUP_CONCAT(s.id)ascount,c.STUDENT_NAMESfromclasscleftjoinstu......
  • MySQL
    一、简介1、sql、DB、DBMS分别是什么,他们之间的关系?DB:DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)DBMS:DataBaseManagementSystem(数据库管理系统,常见的有:MySQL、Oracle、DB2、Sybase、SqlServer...)SQL:结构化查询语言,是一门标准通用的语言,标准的sql适合于所有的数......
  • NineData已支持「最受欢迎数据库」PostgreSQL
    根据在StackOverflow发布的2023开发者调研报告中显示,PostgreSQL以45%vs41%的受欢迎比率战胜MySQL,成为新的最受欢迎的数据库。NineData也在近期支持了PostgreSQL,用户可以在NineData平台上进行创建数据库/Schema、管理用户与角色、导出数据、执行SQL等操作。另外,Ni......
  • 网络安全之SQL注入基于DVWA平台
    弱口令SQL注入万能密码admin'--'admin'#万能用户名xxx'or1=1limit1---脱库一库:information_schema三表:schemata表:存放所有数据库信息tables表:存放所有表信息columns表:存放所有字段信息六字段:schemata表的schema_name字段:存放具体的数据库名......
  • plsql-同义词
    同义词:同义词是对象的别名,不占用任何实际的存储空间,只在oracle数据字典中保存其定义描述,在使用同义词时,oracle会将其翻译为对象的名称用途:简化sql语句隐藏对象的名称和所有者为分布式数据库的远程对象提供位置透明性提供对数据库对象的公共访问创建数据库链......
  • Java基础和MySQL
    Java基础==和equals的区别==比较的是值是否相等。==作用于基本数据类,他比较的是内容==作用于引用数据类型,比较的是地址值equals比较的是对象是否是同一个对象,比较的是对象的内容equals()方法存在于Object类中,在没有重写之前和==是一样,也是比较的是引用数据类型的地址......
  • pgsql备份工具:pg_rman在Linux下的安装、设置与使用
    https://blog.csdn.net/Absurdreal/article/details/128872628?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-8-128872628-blog-128017299.235%5Ev38%5Epc_relevant_sort&depth_1-utm_sou......