首页 > 解决方案 > 加入的前 5 个值(点击次数较多)

问题描述

我有 2 个表:F_Test 和 d_partners 我需要为每个“site_name”提供点击次数最多的前 5 个“partner_name”(通过与 dim_partners 连接)(“partner_id”下的每条记录都是一次点击)。

这是我的查询:

select t.partner_name, t.partner_id
from F_Test as t, d_partners as t2
where t. partner_id =t2.partner_id
GROUP BY t.site_name
Order by desc limit 5

你觉得这样好吗?我应该改变什么?

以下是表格的部分内容:

F_Test 表 F_Test 表

d_partners 表 d_partners 表

标签: mysqlsqljoinselect

解决方案


我希望这样的查询:

select sp.*
from (select t.site_name, p.partner_name, count(*) as num_clicks,
             row_number() over (partition by t.site_name order by count(*) desc) as seqnum
      from F_Test t join
           d_partners p
           on p.partner_id = t.partner_id
      group by t.site_name, p.partner_name
     ) sp
where seqnum <= 5;

笔记:

  • 查询使用正确、明确、标准、可读的JOIN语法。
  • 作为推论: 永远不要FROM从句中使用逗号。
  • 使用有意义的表别名——表名的缩写——而不是无意义的别名。
  • 从 8.0 版开始,窗口函数在 MySQL 中已经有好几年了。

推荐阅读