暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

单挑力扣(LeetCode)SQL笔试题:1435. 制作会话柱状图(难度:简单)

跟强哥学SQL 2023-03-24
267
题目:1435. 制作会话柱状图
(通过次数6,840 | 提交次数10,786,通过率63.42%)
    表:Sessions
    +---------------------+---------+
    | Column Name | Type |
    +---------------------+---------+
    | session_id | int |
    | duration | int |
    +---------------------+---------+
    session_id 是该表主键
    duration 是用户访问应用的时间, 以秒为单位


    你想知道用户在你的 app 上的访问时长情况。因此决定统计访问时长区间分别为 "[0-5>", "[5-10>", "[10-15>"和"15 or more" (单位:分钟)的会话数量,并以此绘制柱状图。
    写一个SQL查询来报告(访问时长区间,会话总数)。结果可用任何顺序呈现。
    下方为查询的输出格式:
    Sessions 表:
    +-------------+---------------+
    | session_id | duration |
    +-------------+---------------+
    | 1 | 30 |
    | 2 | 199 |
    | 3 | 299 |
    | 4 | 580 |
    | 5 | 1000 |
    +-------------+---------------+
    Result 表:
    +--------------+--------------+
    | bin | total |
    +--------------+--------------+
    | [0-5> | 3 |
    | [5-10> | 1 |
    | [10-15> | 0 |
    | 15 or more | 1 |
    +--------------+--------------+
    对于 session_id 1,2 和 3 ,它们的访问时间大于等于 0 分钟且小于 5 分钟。
    对于 session_id 4,它的访问时间大于等于 5 分钟且小于 10 分钟。
    没有会话的访问时间大于等于 10 分钟且小于 15 分钟。
    对于 session_id 5, 它的访问时间大于等于 15 分钟。


    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/create-a-session-bar-chart

      #测试数据
      Create table If Not Exists Sessions (session_id int, duration int);


      insert into Sessions (session_id, duration) values ('1', '30');
      insert into Sessions (session_id, duration) values ('2', '199');
      insert into Sessions (session_id, duration) values ('3', '299');
      insert into Sessions (session_id, duration) values ('4', '580');
      insert into Sessions (session_id, duration) values ('5', '1000');
      解题思路:
      Sessions表中保存了每一次会话的时长。
      题目要求:按4个时长区间,统计出每个区间内的会话数。
      最简单的做法,就是将会话时长,按4个区间的上下限,计算出归属的区间,然后按区间汇总统计即可。
      但若某个区间内一个会话都没有,这种做法,会导致该区间不会返回数据。
      如果要求即使某区间内没有会话,也返回一条为0的记录,一般来说,有如下两种方法:
      第一种:按4个区间,分别使用一句SQL查询该区间的会话数,再将所有区间返回的数据UNION ALL起来。
      第二种:构造一个所有区间的临时表,再与按区间统计出的结果左关联。
      参考SQL:
        with
        tmp as (
        select '[0-5>' as bin union
        select '[5-10>' as bin union
        select '[10-15>' as bin union
        select '15 or more' as bin
        )
        select
        a.bin,
        coalesce(b.total,0) total
        from tmp a
        left join (
        select
        case when duration/60 < 5 then '[0-5>'
        when duration/60 < 10 then '[5-10>'
        when duration/60 < 15 then '[10-15>'
        else '15 or more'
        end bin,
        count(1) total
        from Sessions
        group by 1
        )b
        on a.bin = b.bin;

        来与ChatGPT比比谁的编程能力强?
        单挑力扣(LeetCode)SQL笔试题:1407. 排名靠前的旅行者(难度:简单)
        单挑力扣(LeetCode)SQL笔试题:1421. 净现值查询(难度:简单)


        笔试题合集免费领取方法


        方法一:关注公众号【跟强哥学SQL】,回复关键字【力扣】获取链接。

        方法二:访问【SQL网】:https://sql.wang/sql-leetcode/sql-exercise



        文章转载自跟强哥学SQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论