0
点赞
收藏
分享

微信扫一扫

HQL,SQL刷题,尚硅谷(中级)

sullay 2024-04-19 阅读 31
sql数据库

目录


相关表结构

1、order_info表

2、order_detail表

题目及思路解析:

第一题,查询各品类销售商品的种类数及销量最高的商品

题目需求:

思路解析:

代码实现:

select
    t1.category_id,
    category_name,
    sku_id,
    name,
    order_num,
    order_cnt
from (
    select
        category_id,
        si.sku_id,
        name,
        order_num,
        rank() over (partition by category_id order by order_num desc ) rk,
        count(distinct  od.sku_id) over(partition by category_id) order_cnt
    from (
         select
            sku_id,
            sum(sku_num) order_num
         from order_detail
         group by sku_id )od
    left join sku_info si on si.sku_id=od.sku_id  )t1
left join category_info ci  on ci.category_id=t1.category_id
where rk=1;

代码解析:

执行结果:

补充说明:

----------------------------------------------------------------------------------------------

第二题  查询用户的累计消费金额及VIP等级

题目需求:

思路解析:

代码实现:

select user_id,
       create_date,
       sum_so_far,
       case
           when sum_so_far >= 100000 then '钻石会员'
           when sum_so_far >= 80000 then '白金会员'
           when sum_so_far >= 50000 then '黄金会员'
           when sum_so_far >= 30000 then '白银会员'
           when sum_so_far >= 10000 then '青铜会员'
           when sum_so_far >= 0 then '普通会员'
           end vip_level
from (
         select user_id,
                create_date,
                sum(total_amount_per_day) over (partition by user_id order by create_date) sum_so_far
         from (
                  select user_id,
                         create_date,
                         sum(total_amount) total_amount_per_day
                  from order_info
                  group by user_id, create_date
              ) t1
     ) t2;

代码解析:

执行结果:

----------------------------------------------------------------------------------------------

第三题  查询首次下单后第二天连续下单的用户比率

题目需求:

思路解析:

代码实现:

select
 concat(round(sum(if(datediff(buy_date_second, buy_date_first) = 1, 1, 0)) 
   / count(*) * 100, 1), '%') percentage
from (
         select user_id,
                min(create_date) buy_date_first,
                max(create_date) buy_date_second
         from (
                  select user_id,
                         create_date,
                         rank() over (partition by user_id order by create_date) rk
                  from (
                           select user_id,
                                  create_date
                           from order_info
                           group by user_id, create_date
                       ) t1
              ) t2
         where rk <= 2
         group by user_id
     ) t3;

注意:

1、字符串连接函数:concat

hive> select concat(‘abc’,'def’,'gh’) from iteblog;
      abcdefgh

2、取整函数: round

hive> select round(3.1415926) from iteblog;
3
hive> select round(3.5) from iteblog;
4
hive> create table iteblog as select round(9542.158) from iteblog;
hive> describe iteblog;
_c0     bigint

 

代码解析:

执行结果:


总结归纳:

知识补充:

举报

相关推荐

SQL,HQL刷题,尚硅谷

HQL,SQL刷题,尚硅谷

HQL,SQL刷题,尚硅谷(初级)

HQL刷题 50道

二刷jQuery(以尚硅谷入门)

JVM 尚硅谷

ShardingSphere-尚硅谷

散列表,尚硅谷

0 条评论