欢迎光临散文网 会员登陆 & 注册

这几道SQL题能做对,你就稳了

2020-11-04 10:30 作者:爱数据分析社区  | 我要投稿

题目解析 | 爱数据助教内容

来源 | 爱数据学院10月SQL月考题


01 第一题


写出下面语句的实际执行顺序

解题思路

SQL子句逻辑执行顺序:

From → Where  → Group by → Having → Select → Distinct → Union → Order by


02 第二题

表名:student,用sql查询出“张”姓学生中平均成绩大于75分的学生信息;

解题思路

03 第三题

用一条SQL语句查询xuesheng表每门课大于80分的学生

  1. 如果不考虑少录入情况(比如张三只有2个课程,王五有3个课程)

  2. 如果考虑学生的课程数大于等于3的情况

解题思路

04 第四题


不同城市、不同性别,2019年支付金额最高的 TOP 10用户(使用user_info 用户信息表;user_order 用户订单表)

解题思路

Step1:在订单信息表中,每一个用户可以重复下单,所以在这里可以先得到每一个用户在2019年的总支付金额;

Step2:接着通过公共字段 user_id将用户订单表和用户信息表进行关联,获得包含城市、性别的宽表,然后再通过窗口函数row_number对不同城市,不同性别的用户进行排名标记;

SELECT   a.user_name,
         b.city,
         b.sex,
         a.pay_amount,
         row_number() over(partition by b.city,b.sex order by a.pay_amount desc) rank
FROM(SELECT  user_id
             ,sum(pay_amount) pay_amount
      FROM user_order   
      WHERE year(dt)=2019
      GROUP BY user_id)a
LEFT JOIN user_info b on a.user_id = b.user_id

Step3:最后通过嵌套一个子查询,使用where子句作为筛选条件,筛选出Top10的用户即可;

-- 4.每个城市、不同性别,2019年支付金额最高的TOP10用户 --
SELECT  c.user_name,
        c.city,
        c.sex,
        c.pay_amount,
        c.rank
FROM(SELECT   a.user_name,
              b.city,
              b.sex,
              a.pay_amount,
              row_number() over(partition by b.city,b.sex order by a.pay_amount desc) rank
      FROM
      (SELECT  user_id
               ,sum(pay_amount) pay_amount
      FROM user_order   
      WHERE year(dt)=2019
      GROUP BY user_id)a
      LEFT JOIN user_info b on a.user_id = b.user_id)c
WHERE c.rank<=10;

END -

本文为爱数据学院SQL月考试题解析

版权归爱数据学院所有,转载请联系后台


这几道SQL题能做对,你就稳了的评论 (共 条)

分享到微博请遵守国家法律