从同一列中只选择5个子值,在MySQL中选择多个父值

von4xj4u  于 2022-10-22  发布在  Mysql
关注(0)|答案(1)|浏览(177)

我能得到一些帮助吗?
数据库:CompanyXYZ
表:mkt_product
类别ID是父值,产品ID是子值

我在同一个表中有这些列:

产品ID类别ID产品
001cat1洗衣机
002cat1冰箱
003cat1烤箱
004cat1内置烤箱
005cat1微波炉
006cat1真空吸尘器
007cat1滚刀
008cat2土豆
009cat2胡萝卜
010cat2洋葱
011cat2大蒜
012cat2番茄
013cat2cucumber
014cat2生菜

我想要的结果:

产品ID类别ID产品
001cat1洗衣机
002cat1冰箱
003cat1烤箱
004cat1内置烤箱
005cat1微波炉
008cat2土豆
009cat2胡萝卜
010cat2洋葱
011cat2大蒜
012cat2番茄

最后,我是否从每个类别中获得前5名的结果并不重要,但我只想从每个类别获得5个结果。这就像每个类别的“限制5”,但在相同的输出中,只有一个查询。我试过用“limit”和“having count”,但我没有得到我想要的。
非常感谢。

gcxthw6b

gcxthw6b1#

正如我在评论中所说,您可以使用window-functions-usage来完成
架构代码:

  1. create table mkt_product(
  2. product_id varchar(100),
  3. category_id varchar(100),
  4. product varchar(100)
  5. );
  6. insert into mkt_product(product_id,category_id,product)
  7. values
  8. ('001','cat1','Washing machine'),
  9. ('002','cat1','Refrigerator'),
  10. ('003','cat1','Oven'),
  11. ('004','cat1','Built in Oven'),
  12. ('005','cat1','Microwave'),
  13. ('006','cat1','Vacuum cleaner'),
  14. ('007','cat1','Hob'),
  15. ('008','cat2','Potato'),
  16. ('009','cat2','Carrot'),
  17. ('010','cat2','Onion'),
  18. ('011','cat2','Garlic'),
  19. ('012','cat2','Tomato'),
  20. ('013','cat2','Cucumber'),
  21. ('014','cat2','Lettuce');

查询sql:

  1. SELECT t1.*
  2. FROM mkt_product t1
  3. JOIN
  4. (
  5. SELECT product_id,category_id,product,
  6. ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY product_id) as rn
  7. FROM mkt_product
  8. ) t2 ON t1.product_id = t2.product_id
  9. AND t1.category_id=t2.category_id AND t1.product=t2.product
  10. WHERE rn<=5

注意:t1.product_id = t2.product_id AND t1.category_id=t2.category_id AND t1.product=t2.product非常难看,如果你的表有id这样的主键,它会更简单
DB Fiddle Demo

展开查看全部

相关问题