gpt4 book ai didi

mysql - 获取连接的前 3 项

转载 作者:行者123 更新时间:2023-11-29 05:54:29 25 4
gpt4 key购买 nike

我有 3 个表:product、category 和 product_category(每个类别中有哪些产品)。

我想获得每个类别中前 3 名最昂贵的产品。

我有这个基本关系:

select c.name
, p.id
, p.price
from category c
left
join product_category pc
on pc.category_id = category.id
left
join product p
on pc.product_id = p.id

但现在我只想获得每个类别中最昂贵的 3 个。

在这种情况下,我们可以使用任意数量的连接表,并且可以升级为任何更复杂的查询。

这可以不用循环吗?

我在这个模式中使用 10.2.14-MariaDB-log http://sqlfiddle.com/#!9/43035a

最佳答案

MySQL 8.0+ 和 MariaDB 10.2+ 支持像 dense_rank 这样适合处理您的情况的窗口函数。对于每个类别,我们根据产品价格分配排名,并仅拉出前 3 名的那些。使用 dense_rank 可以正确处理平局,这意味着如果某个类别的产品价格相同在特定类别的输出中可以超过 3 行。如果这种行为不是首选行为,并且您希望在输出中看到最多 3 行,放弃联系,请改用 row_number 窗口函数。

select name, id
from (
select c.name, p.id, dense_rank() over (partition by c.id order by p.price desc) as rank
from category c
left join product_category pc on pc.category_id = c.id
left join product p on pc.product_id = p.id
) t
where rank <= 3

关于mysql - 获取连接的前 3 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51000326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com