Search code examples
mysqlsqlgroup-bygreatest-n-per-group

MySQL: how to get x number of results per grouping


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

I have a two tables:

  1. Items
  2. Categories

Each item belongs to a category. What I want to do is select 5 items per category but say 20 items in total.

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

Edit: if there are more than 5 items per category - they should be ordered by the item_id (numeric value)


Solution

  • Try this query -

    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
    

    It will show first 5 items per category. Uncomment LIMIT 20 if you need. Join Categories table if you need.