首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组中限制在mysql中

组中限制在mysql中
EN

Stack Overflow用户
提问于 2021-09-07 14:48:43
回答 1查看 44关注 0票数 0

我有一个关于mysql的问题。假设我有一张桌子,如下所示。数据库img

在这个表中,我有三个参数:用户、视频和favorite_speed。

现在的问题是,我想得到每个用户在每门课程中看到的最后3段视频的平均速度。要将视频连接到课程,我们必须在课程与主题和视频之间有两个连接。

例如,使用下面的代码,我得到了课程中每个用户的平均速度。但问题是,我如何获得最后3段视频的平均值?

代码语言:javascript
复制
SELECT avg(favorite_speed),favorite_speed.user_id,topics.course_id 
FROM favorite_speed,videos,topics 
WHERE favorite_speed.video_id=videos.id AND topics.id=videos.topic_id 
GROUP BY user_id,videos.topic_id  
ORDER BY `avg(favorite_speed)`  DESC
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 15:12:04

现在的问题是,我想得到每个用户在每门课程中看到的最后3段视频的平均速度。

您可以使用窗口函数来识别最近的三个视频。假设它是基于favorite_speed.id

代码语言:javascript
复制
SELECT fs.user_id, v.course_id, avg(fs.favorite_speed), 
FROM (SELECT fs.user_id, fs.favorite_speed, v.course_id,
             ROW_NUMBER() OVER (PARTITON BY fs.user_id, v.course_id ORDER BY fs.id DESC) as seqnum
      FROM favorite_speed fs JOIN
           videos v 
           ON fs.video_id = v.id 
     ) fsv
WHERE seqnum <= 3
GROUP BY fs.user_id, v.course_id; 
ORDER BY avg(fs.favorite_speed) DESC;

注意,不需要topics表,因为信息在videos表中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69090329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档