Sql 需要咨询以列出排名前5的游戏

Sql 需要咨询以列出排名前5的游戏,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,嗨,我正在帮助我的朋友创建一个网站,显示游戏的评级 我的表和列是: 游戏 游戏id 头衔 体裁 评级 用户id 游戏id 评级 时间戳 用户 用户id 性别 年龄 职业 邮政编码 我需要帮助创建一个SQL查询,其中列出: 按用户性别排名前5名的最高级别游戏 每个用户年龄组排名前5的最高游戏 每个职业排名前5的最高级别游戏 我已经尝试过查看,但我不擅长SQL,可能需要一些建议我建议使用内部联接来收集数据: SELECT g.title, g.genre, r.rating, u.g

嗨,我正在帮助我的朋友创建一个网站,显示游戏的评级

我的表和列是:

游戏

  • 游戏id
  • 头衔
  • 体裁
评级

  • 用户id
  • 游戏id
  • 评级
  • 时间戳
用户

  • 用户id
  • 性别
  • 年龄
  • 职业
  • 邮政编码
我需要帮助创建一个SQL查询,其中列出:

  • 按用户性别排名前5名的最高级别游戏
  • 每个用户年龄组排名前5的最高游戏
  • 每个职业排名前5的最高级别游戏

我已经尝试过查看,但我不擅长SQL,可能需要一些建议

我建议使用内部联接来收集数据:

SELECT g.title, g.genre, r.rating, u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id 
然后,可以使用
ORDER by子句对这些数据进行排序,以便对评级进行相应排序:

SELECT g.title, g.genre, r.rating, u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
ORDER BY r.rating DESC;
为了只返回结果的顶部数量,请使用LIMITnumber子句

下面是一个完整的例子:

SELECT g.title, g.genre, r.rating, u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
ORDER BY r.rating DESC
LIMIT 5;
本例针对您列出的第一个SQL查询需求进行了裁剪,其他两个查询可以通过遵循相同的结构来实现


编辑: 在进一步理解OP的原始帖子之后,下面对上面完整的示例查询进行了改编。由于要求根据用户的平均评分返回前5名游戏,因此必须使用条款AVG()获得游戏评分的平均值

GROUP BY子句的使用允许每个独特的游戏id计算其平均值。正在使用的这些条款的示例:

SELECT g.title, g.genre, AVG(r.rating), u.gender
FROM rating r
INNER JOIN u.user_id on r.user_id = u.user_id
INNER JOIN g.game_id on r.game_id = g.game_id
GROUP BY g.game_id
ORDER BY AVG(r.rating) DESC
LIMIT 5;

查看
LIMIT
关键字。中没有
TOP
postresql@a_horse_with_no_name谢谢你的提醒,我没注意到。我对我的答案做了相应的调整。起初,这似乎是我所需要的:-)但是我注意到它只限制了5个不同用户的评分。我想我需要一个计数(*),这样它可以汇总/平均每场比赛的评分,因为一场比赛可以从不同的用户那里获得不同的评分,所以需要汇总每场比赛的所有评分:o@Jessica别担心,我从你的原始帖子中不太明白这一点——我编辑了上面的帖子,希望能根据你想要达到的目标进行调整:)