MySQL:如何获得每组分组的x个结果

KB.*_*KB. 7 mysql sql group-by greatest-n-per-group

可能重复:
mysql:在GROUP BY中使用LIMIT获得每组N个结果?

我有两张桌子:

  1. 项目
  2. 分类

每个项目属于一个类别.我想要做的是每个类别选择5个项目,但总共说20个项目.

SELECT 

   item_id, item_name, items.catid 

FROM

   items, categories

WHERE

   items.catid = categories.catid

GROUP BY items.catid LIMIT 0,5 //5 per category group
Run Code Online (Sandbox Code Playgroud)

编辑:如果每个类别有超过5个项目 - 它们应按item_id排序(数值)

Dev*_*art 5

试试这个查询 -

SELECT item_id, item_name, catid FROM 
  (SELECT t1.*, COUNT(*) cnt FROM items t1
    LEFT JOIN items t2
      ON t2.catid = t1.catid AND t2.item_id <= t1.item_id 
  GROUP BY
    t1.catid, t1.item_id
  ) t
WHERE
  cnt < 6
-- LIMIT 20
Run Code Online (Sandbox Code Playgroud)

它将显示每个类别的前5个项目.LIMIT 20如果需要,取消注释.Categories如果需要,请加入表格.