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

标签 mysql sql group-by greatest-n-per-group

<分区>

Possible Duplicate:
mysql: Using LIMIT within GROUP BY to get N results per group?

我有两个表:

  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

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

最佳答案

试试这个查询-

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

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

关于MySQL:如何获得每个分组的 x 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359640/

相关文章:

mysql - 无法抓取 db :migrate because of mysql missing . frm 文件

mysql - 如何使用二维码保护 MySQL?

javascript - Laravel 和 JQuery : Display mysql row data if ID is set

mysql - MySQL 中的复杂 SELECT 查询

SQL 检查具有两个键的重复记录

mysql - 多对多数据库设计,第三张表?

sql - 关系数据库中的键值对

php - 检查行是否在 while 循环中分组

mysql - 由于分组依据,行数增加了

python - 基于缺失数据百分比的分箱