DAY4 高频SQL 50题部分(自用版)

本文介绍了如何通过SQL查询获取用户首单数据,计算即时配送的首单比例,以及游戏玩法中用户首次登录后第二天活跃度的统计方法。作者展示了两个SQL实例及其运行结果。
摘要由CSDN通过智能技术生成

高频 SQL 50 题(基础版)

*[注:题目来自力扣网 https://leetcode.cn/studyplan/sql-free-50/]
主打一个寒假复健,执行时间大大滴摆烂

1174. 即时食物配送 II

在这里插入图片描述

思路:

查询出所有用户的首单数据,除以用户数量——

  1. 使用GROUP BY子句对 customer_id 进行分组,随后利用MIN函数来找出每个用户的最早订单日期。
  2. (customer_id, order_date)结果集作为子查询,并与原始订单表通过WHERE IN子句进行匹配,从而筛选出每个用户的第一笔订单详情。

代码:

SELECT
    ROUND(SUM(order_date = customer_pref_delivery_date) * 100/ COUNT(*) , 2) 
        AS immediate_percentage
FROM
    Delivery
    WHERE 
    (customer_id, order_date) IN(
         SELECT customer_id, min(order_date)
         FROM Delivery
         GROUP BY customer_id
)

运行结果:

加粗样式

550. 游戏玩法分析 IV

在这里插入图片描述

思路:

类似1174

  1. 求出所有用户首次登录的第二天的时间。查询出 Activity 表中每个用户的第一天时间,并加上 1(若是+数字1忽略每个月最后一天情况,需改为 INTERVAL 1 DAY)
SELECT player_id, DATE(MIN(event_date) + INTERVAL 1 DAY )
    FROM activity
    GROUP BY player_id
  1. 统计用 1.得到数据的用户数量,除以用户总数,相除并保留两位小数即可。

代码:

SELECT
    IFNULL(
        ROUND(
        COUNT(distinct player_id)/ (select count(distinct player_id) from activity),2)
    ,0) AS fraction
FROM
    Activity
WHERE (player_id, event_date) in
(
    SELECT player_id, DATE(MIN(event_date) + INTERVAL 1 DAY )
    FROM activity
    GROUP BY player_id
)

运行结果:

在这里插入图片描述

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值