大数据面试题之SQL题

大数据面试题之SQL题

1.有一个录取学生人数表,记录的是每年录取学生人数和入学学生的学制
以下是表结构:
CREATE TABLE admit (
id int(11) NOT NULL AUTO_INCREMENT,
year int(255) DEFAULT NULL COMMENT ‘入学年度’,
num int(255) DEFAULT NULL COMMENT ‘录取学生人数’,
stu_len varchar(255) DEFAULT NULL COMMENT ‘学生学制’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT=‘录取人数’;
year表示学生入学年度
num表示对应年度录取学生人数
stu_len表示录取学生的学制
说明:例如录取年度2018学制3,表示该批学生在校年份为2018~2019、2019~2020、2020~2021
以下是示例数据:

idyearnumstu_len
1201820003
2201920003
3202010004
4202020003

根据以上示例计算出每年在校人数,写出SQL语句:

SELECT 
			t2.year,
			t2.res
FROM(
		SELECT 
			t1.`year`,
			SUM(t1.num) over(ORDER BY t1.`year`) as res,
			ROW_NUMBER() over(PARTITION BY t1.`year` ORDER BY t1.`year`) as ranking
		FROM(
				SELECT year,num FROM admit
				UNION ALL
				SELECT year+stu_len as year,-num FROM admit
				) as t1
		ORDER BY t1.`year`
		) as t2
WHERE t2.ranking = 1;

计算结果截图:
在这里插入图片描述

2.有一个分数表id 是该表的主键。该表的每一行都包含了一场考试的分数。Score 是一个有两位小数点的浮点值。
以下是表结构和数据:
Create table Scores (
id int(11) NOT NULL AUTO_INCREMENT,
score DECIMAL(3,2),
PRIMARY KEY (id)
);

查询并对分数进行排序。排名按以下规则计算:

分数应按从高到低排列。
如果两个分数相等,那么两个分数的排名应该相同。
在排名相同的分数后,排名数应该是一个连续的整数。

分数表:

idscore
13.5
23.65
34.0
43.85
54.00
63.65

根据以上示例数据计算出排名,写出SQL语句不能使用dense_rank和over开窗函数:

select s1.score,
    (
    		-- distinct 去除重复的成绩
        select count(distinct s2.score)
        from scores s2
        where s2.score >= s1.score 
    ) as 'rank'
from scores s1
order by s1.score desc;

计算结果截图:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(YSY_YSY)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值