mysql - 加入的前 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
你觉得这样好吗?我应该改变什么?
以下是表格的部分内容:
解决方案
我希望这样的查询:
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 中已经有好几年了。
推荐阅读
- python-3.x - 根据其他列值从数据框列中的列表中删除最后一个元素
- html - 如何在没有 justify-content 的情况下右对齐 flexbox 中的图像?
- git - 为什么“git prune --expire=never”会运行这么长时间?
- ruby - 当一个类离开范围时,ruby 有没有办法捕捉到?
- json - 如何在 iOS 中解析没有 JSONdecoder 的 JSON 对象?
- image - 将多个裁剪图像中的 RGB 值保存在 csv 文件中
- java - 无法在 Selenium 的日历中选择和打印月份
- translate - 使用 po 文件将表格内模板文件中的英语关键字翻译成阿拉伯语。不翻译。翻译包含在 po 文件中
- html - 尽管路径正确,但将 Img 文件放入子文件夹时损坏
- python - pandas/python:在 2 个 df 之间搜索循环并将最终结果输入到新的 df