【LeetCode 1142】过去30天的用户活动 II (SQL)

您所在的位置:网站首页 leetcode手机端 【LeetCode 1142】过去30天的用户活动 II (SQL)

【LeetCode 1142】过去30天的用户活动 II (SQL)

2023-07-26 15:34| 来源: 网络整理| 查看: 265

一、题目:

Table: Activity

+---------------+---------+ | Column Name   | Type    | +---------------+---------+ | user_id       | int     | | session_id    | int     | | activity_date | date    | | activity_type | enum    | +---------------+---------+ 该表没有主键,它可能有重复的行。 activity_type 列是 ENUM(“ open_session”,“ end_session”,“ scroll_down”,“ send_message”)中的某一类型。 该表显示了社交媒体网站的用户活动。 请注意,每个会话完全属于一个用户。  

编写SQL查询以查找截至2019年7月27日(含)的30天内每个用户的平均会话数,四舍五入到小数点后两位。我们只统计那些会话期间用户至少进行一项活动的有效会话。

查询结果格式如下例所示:

Activity table: +---------+------------+---------------+---------------+ | user_id | session_id | activity_date | activity_type | +---------+------------+---------------+---------------+ | 1       | 1          | 2019-07-20    | open_session  | | 1       | 1          | 2019-07-20    | scroll_down   | | 1       | 1          | 2019-07-20    | end_session   | | 2       | 4          | 2019-07-20    | open_session  | | 2       | 4          | 2019-07-21    | send_message  | | 2       | 4          | 2019-07-21    | end_session   | | 3       | 2          | 2019-07-21    | open_session  | | 3       | 2          | 2019-07-21    | send_message  | | 3       | 2          | 2019-07-21    | end_session   | | 3       | 5          | 2019-07-21    | open_session  | | 3       | 5          | 2019-07-21    | scroll_down   | | 3       | 5          | 2019-07-21    | end_session   | | 4       | 3          | 2019-06-25    | open_session  | | 4       | 3          | 2019-06-25    | end_session   | +---------+------------+---------------+---------------+

Result table: +---------------------------+  | average_sessions_per_user | +---------------------------+  | 1.33                      | +---------------------------+  User 1 和 2 在过去30天内各自进行了1次会话,而用户3进行了2次会话,因此平均值为(1 +1 + 2)/ 3 = 1.33。

二、解法 (比题解里别人的效果略好,所以记录一下) # Write your MySQL query statement below with t1 as ( select user_id,count(distinct(session_id)) as us from activity where activity_date between "2019-06-28" and "2019-07-27" group by user_id ) select ifnull(round(sum(us) / count(user_id),2),0) as average_sessions_per_user from t1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3