MySql限制行但不截断行组

时间:2017-03-10 09:01:37

标签: mysql

我有下表

id| name     |price| groupid | category
---------------------------------------
1 | product1 | 14  | grp1    | apparel
2 | product1 | 16  | grp1    | apparel
3 | product1 | 36  | grp1    | apparel
4 | product2 | 97  | grp2    | apparel
5 | product2 | 87  | grp2    | apparel
6 | product2 | 77  | grp2    | apparel
7 | product3 | 3   | grp3    | apparel
8 | product3 | 2   | grp3    | apparel
9 | product3 | 5   | grp3    | apparel

我想按类别获取此表中的产品,并按应用层中的组ID进行分组。这是我正在使用的简单SELECT查询:

SELECT * FROM products
WHERE category = 'apparel'
LIMIT 0,5

现在的问题是查询截断了结果,并且没有返回grp2(id = 6)中的最后一项(正如人们所期望的那样)。

我希望查询检测到组中的一个项目未返回,同时获取该项目,然后截断结果的其余部分。基本上我想要返回组中的所有项目或者根本不返回组中的任何项目。

我怎么可能实现这个目标?

编辑:每个组可能有1到12个项目。它是可变的。

1 个答案:

答案 0 :(得分:2)

这是实现目标的一种方式:

SELECT t1.*
FROM products AS t1
JOIN (
   SELECT DISTINCT groupid
   FROM (
      SELECT groupid 
      FROM products
      WHERE category = 'apparel'
      LIMIT 0,5) AS t
) AS t2 ON t1.groupid = t2.groupid

该查询使用派生表,该表包含属于应用groupid时返回的行的所有不同 LIMIT值。

Demo here