【Hive SQL 每日一题】在线课程学生行为数据分析

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 该数据分析师任务是分析在线学习平台的学生行为,以优化课程内容和学习体验。提供的数据包括`students`表(含学生ID、姓名、年龄和性别)和`course_activity`表(含活动ID、学生ID、课程ID、活动日期和学习时长)。分析涉及:1) 学生参加的课程数量,2) 课程总学习时长,3) 按性别分组的平均学习时长,4) 学生首次参加的课程及日期,5) 学生最近一次学习的时长,以及6) 参与学生最多的课程。所有查询都使用了SQL,部分涉及窗口函数和分组统计。数据集可在给定链接下载。

需求描述

假设你是一位数据分析师,负责分析某在线学习平台的学生行为数据,平台上有多个课程,学生可以在不同的日期参加不同的课程,请你完成相关业务分析,帮助平台优化课程内容和学生学习体验。

数据准备

我们有两张表,表的字段信息如下:

students

记录学生的信息

字段名 字段类型 备注
student_id int 学生ID
name string 学生姓名
age int 学生年龄
gender string 学生性别

示例数据:

student_id name age gender
1 'Alice' 23 'F'
2 'Bob' 22 'M'
3 'Cathy' 24 'F'
4 'David' 23 'M'
5 'Eve' 25 'F'

course_activity

记录学生的在线学习课程的数据

字段名 字段类型 备注
activity_id int 活动ID
student_id int 学生ID
course_id int 课程ID
activity_date string 活动日期
duration int 学习时长(分钟)

示例数据:

activity_id student_id course_id activity_date duration
101 1 1001 '2024-01-01' 30
102 1 1002 '2024-01-01' 45
103 2 1001 '2024-01-02' 20
104 3 1001 '2024-01-03' 25
105 3 1003 '2024-01-04' 60
106 4 1002 '2024-01-02' 40
107 5 1001 '2024-01-03' 50
108 5 1002 '2024-01-04' 30

数据集 SQL 下载

需求分析与实现

1.每个学生参加的课程数量

select
    student_id,
    count(distinct course_id) course_num
from
    course_activity
group by
    student_id
order by
    student_id;

image.png

解题思路

  1. 按学生ID进行分组,统计课程ID的数量;

  2. 在统计时需要去重,因为学生在学习同一门课程时会存在多条记录。

2.每个课程的总学习时长

select
    course_id,
    sum(duration) total_minutes
from
    course_activity
group by
    course_id
order by
    course_id;

image.png

解题思路

  • 按课程ID进行分组,根据学习时长累加求和。

3.按性别分组的平均学习时长

select
    gender,
    cast(gender_duration / gender_count as decimal(6,0)) avg_duration
from
    (select
        gender,
        sum(duration) gender_duration,
        count(distinct ca.student_id) gender_count
    from
        course_activity ca
    join
        students si
    on
        si.student_id = ca.student_id
    group by
        gender)t1;

image.png

解题思路

  • 根据学生ID对两个表进行 join 操作;

  • 按学生性别进行分组,对学习时长累加求和,并统计学生数量;

  • 计算每组的平均学习时长。

4.每个学生首次参加的课程及其日期

select
    student_id,
    course_id,
    activity_date
from
    (select
        student_id,
        course_id,
        activity_date,
        min(activity_date) over(partition by student_id) min_activity_date
    from
        course_activity)t1
where
    activity_date = min_activity_date
order by
    student_id;

image.png

解题思路

  • 利用窗口函数分组取每名学生最早的学习日期;

  • 通过获取到的日期进行等值过滤,最终得到结果。

注意,在这里会出现一名学生首日参加多条数据的情况,但由于时间字段没有记录时分秒,无法界定哪条数据先产生,所以这里将首日的数据都进行了保留。如果想要仅保留一条数据,可以把 min 换成 rank 窗口排序,然后将过滤条件设置为 rank=1 即可。

5.每个学生最近一次参加课程的持续时间

select
    student_id,
    duration
from
    (select
        student_id,
        activity_date,
        duration,
        max(activity_date) over(partition by student_id) max_activity_date
    from
        course_activity)t1
where
    activity_date = max_activity_date
order by
    student_id;

image.png

解题思路

  • 利用窗口函数分组取每名学生距今最近的学习日期;

  • 通过获取到的日期进行等值过滤,最终得到结果。

这个需求和上面的需求类似,反过来而已。

6.活跃度最高的课程(按参与学生人数计)

select
    course_id,
    stu_count
from
    (select
        course_id,
        count(distinct student_id) stu_count
    from
        course_activity
    group by
        course_id)t1
order by
    stu_count desc
limit 1;

image.png

解题思路

  • 按课程ID分组去重统计学习该课的人数;

  • 通过全局降序排列,取前 1 条数据,获取到活跃度最高的课程。

相关文章
|
1月前
|
SQL 自然语言处理 数据可视化
狂揽20.2k星!还在傻傻的写SQL吗,那你就完了!这款开源项目,让数据分析像聊天一样简单?再见吧SQL
PandasAI是由Sinaptik AI团队打造的开源项目,旨在通过自然语言处理技术简化数据分析流程。用户只需用自然语言提问,即可快速生成可视化图表和分析结果,大幅降低数据分析门槛。该项目支持多种数据源连接、智能图表生成、企业级安全防护等功能,适用于市场分析、财务管理、产品决策等多个场景。上线两年已获20.2k GitHub星标,采用MIT开源协议,项目地址为https://github.com/sinaptik-ai/pandas-ai。
113 5
|
3月前
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
105 4
|
4月前
|
SQL 数据可视化 IDE
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
|
6月前
|
SQL 数据挖掘 数据库
这可能是最适合解决 SQL 数据分析痛点的编程语言
数据分析师常需处理各种数据操作,如过滤、分组、汇总等,SQL 在这些基本需求上表现得心应手。然而,面对本地文件数据或更复杂需求时,SQL 的局限性显现。SPL(Structured Process Language)则提供了更灵活的解决方案,无需数据库环境,直接从文件计算,代码简洁易懂,调试工具强大,极大提升了数据分析的效率和交互性。
|
8月前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
228 3
|
7月前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
8月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
193 0
|
8月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
232 0
|
10月前
|
SQL 数据挖掘
7张图总结:SQL 数据分析常用语句!
7张图总结:SQL 数据分析常用语句!
144 8