Get the top 3 items of a join
我有三张桌子:产品、类别和产品类别(每个类别中都有哪些产品)。
我想在每一类中获得前三名最贵的产品。
我有这样的基本关系:
1 2 3 4 5 6 7 8 9 10
| 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 |
但现在我只想得到每一类中最贵的三个。
在这种情况下,我们可以使用任意数量的联接表,并且可以将其升级为任何更复杂的查询。
如果没有循环,这是可能的吗?
我正在使用10.2.14-mariadb-log和这个模式http://sqlfiddle.com/!9/43035A
- 在这种情况下,查询应该从类别表开始。
- 更改(我的意思是编辑);-)
- 只需动态创建一个long union all语句。
- 你能用sqlfiddle提供你的数据库模式吗?
- 看看为什么我应该为我看来是非常简单的SQL查询提供一个mcve
- 您使用的是哪个MySQL版本?
- @Rakibulislam在那儿
- @卡米尔。在那里你有
- 每组分组结果的get top n记录可能重复
- 有效的GroupWise最大值
MySQL 8.0 + +支持mariadb &;10.2 dense_rankwhich are窗口类函数suited to handle的你的房子。我们assign for each category基于产品价格拉队伍,和那些谁是在the only,顶部3。使用dense_rankof which means that if关系properly把手there are with the same for a category产品价格超过3 there can be in the rows for a category是输出。if this is not the preferred"的行为,你会看到"我在the rows 3最大输出,discarding函数关系,利用row_numberwindow instead。P></