MySQL_查询面试题(持续更新)

这篇博客整理了一系列MySQL面试中的查询题目,包括计算月最大值、性别合计、仓库动态合计、年月累计值等。通过案例解析,展示了如何运用动态SQL解决不确定数量的仓库合计问题,以及使用窗口函数处理复杂的数据聚合和连续签到计算。同时,列转行、日期间隔等实际问题的探讨,为读者提供了丰富的SQL实战经验。
摘要由CSDN通过智能技术生成

前言

资源全部来自于网络,我会尽量在每一题上都写上注释,没什么好说的,做就完事了。

第一题 计算月最大值

在这里插入图片描述

-- 建表
CREATE TABLE mianshi1 (id VARCHAR (20),dates VARCHAR (20),v_num INT) charset=utf8;

-- 插入数据
INSERT INTO mianshi1 VALUES ("A","2015-01",5),("A","2015-01",15),("B","2015-01",5),("A","2015-01",8),("B","2015-01",25),("A","2015-01",5),("A","2015-02",4),("A","2015-02",6),("B","2015-02",10),("B","2015-02",5),("A","2015-03",16),("A","2015-03",22),("B","2015-03",23),("B","2015-03",10),("B","2015-03",11);

-- 创建一个临时表,保存分组后的当月访问次数
CREATE TABLE middle
AS
SELECT id, dates, SUM(v_num) AS s
FROM mianshi1
GROUP BY id, dates
ORDER BY id;

-- 不使用窗口函数
-- 将中间表进行自链接,然后再根据b表进行分组,对分组后的a表数据进行聚合运算
SELECT a.id AS '用户', b.dates AS '月份', b.s AS '当月访问次数'
	, MAX(a.s) AS '最大访问次数'
	, SUM(a.s) AS '总访问次数'
FROM middle a
	INNER JOIN middle b
	ON a.id = b.id
		AND a.dates <= b.dates
GROUP BY b.id, b.dates;

-- 使用窗口函数	
SELECT id AS '用户', dates AS '月份', s AS '当月访问次数'
	, MAX(s) OVER (PARTITION BY id  ROWS BETWEEN unbounded PRECEDING AND CURRENT ROW) AS '最大访问次数'
	, SUM(s) OVER (PARTITION BY id  ROWS BETWEEN unbounded PRECEDING AND CURRENT ROW) AS '总访问次数'
FROM middle;

第二题 计算性别合计

在这里插入图片描述
计算各院系的男女计数以及合计。

-- 建表
CREATE TABLE student1 (id VARCHAR (20),NAME VARCHAR (20),gender CHAR (1),birth VARCHAR (20),department VARCHAR (20),address VARCHAR (20)) charset=utf8;

-- 插入数据 
INSERT INTO student1 VALUES ("201901","张大佬","男","1985","计算机系","北京市海淀区"),("201902","郭大侠","男","1986","中文系","北京市昌平区"),("201903","张三","女","1990","中文系","湖南省永州市"),("201904","李四","
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值