大数据笔试题_第一阶段配套笔试题03

--学生表
Create.table.student
(
……std_id.string.comment‘学号’
……,name …string.comment‘姓名’
……,sex…string.comment‘性别’
);
--课程表
Create.table.course
(
……course_id..string.comment‘课程 ID’
……,name ……string.comment‘课程名称’
);
--课程成绩表
Create.table.course_score
(
……course_id..string.comment‘课程 ID’
……,std_id.string.comment‘学号’
……,score……double.comment.‘分数’
)

题目:

(1) 没有选修生物课的同学:学号,姓名,性别;

SELECT t.*
  FROM student t
  LEFT JOIN (SELECT s.std_id
               FROM score s
               JOIN course c
                 ON s.course_id = c.course_id
              WHERE c.name = '生物') b
    ON t.std_id = b.std_id
 WHERE b.std_id IS NULL;


(2) 求选修了两门课及以上且成绩不低于 80 分的同学:学号;

select s.学号
  from score s
 WHERE s.分数 >= 80
 group BY s.学号
having count(1) >= 2;

(3) 求每门课程的前三名学生信息:学号,姓名,课程名称,成绩;

WITH t1 AS
 (select s.*,
         row_number() over(PARTITION BY s.course_id order by s.score DESC) rn
    from score s),
t2 AS
 (SELECT t1.* FROM t1 WHERE rn <= 3)

SELECT t2.std_id, t.name, c.name, t2.score
  FROM t2
  join student t
    on t.std_id = s.std_id
  join course c
    on c.course_id = t2.course_id;

(4) 统计每个学生选修的所有课程及成绩:学号,姓名,性别,课程成绩集合【语文-90,
数据-60,英语-80】

select t.std_id,
       t.name,
       t.sex,
       wm_concat(c.name || '-' || s.score) 课程成绩集合
  from student t
  join score s
    on t.std_id = s.std_id
  JOIN course c
    on c.course_id = s.course_id
 GROUP BY t.std_id, t.name, t.sex;

二.表信息

--登录日志表
Create.table.login_log
(
……uid………string.comment.‘用户 ID’
……login_date.string.comment.’登录日期 yyyy-mm-dd’
);

题目:求从 2021 年开始,连续登录过 7 天以上的用户 id

-方法一
WITH t1 as
 (select l.uid,
         l.login_date - row_number() over(PARTITION BY UID order by l.login_date) cz
    from login_log l
   where SUBSTR(l.login_date, 1, 4) >= '2021')
SELECT UID FROM t1 GROUP BY UID, cz HAVING COUNT (1) >= 8;

--方法二
WITH t1 AS
 (select l.uid
         --,l.login_date-row_number()over(PARTITION BY UID order by l.login_date) cz
          LEAD(login_date, 7) OVER(PARTITION BY UID order by l.login_date) l_dt
    from login_log l)
SELECT uid FROM t1 WHERE l_dt - login_date = 7;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据小塔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值