如何在SQL Select中创建部分LIMIT

时间:2016-08-31 11:59:08

标签: mysql count limit where

我知道在SQL语句结尾处有一个LIMIT,如下所示:

 SELECT * FROM books WHERE 1 LIMIT 3

它最多会显示表books中的3个项目。

现在假设我们有一个字段category并按其过滤:

 SELECT * FROM books WHERE category IN (1, 3, 5) LIMIT 3

我将获得具有值为1或3或5的类别的行,并且再次将行数限制为3。

如何为每个类别限制3? (基本思想概要)

 SELECT * FROM books WHERE category IN (1, 3, 5) LIMITS (3, 3, 3)

3 个答案:

答案 0 :(得分:3)

您可以使用UNION

执行此操作
(SELECT * FROM books WHERE category = 1 LIMIT 3)
UNION 
(SELECT * FROM books WHERE category = 3 LIMIT 3)
UNION 
(SELECT * FROM books WHERE category = 5 LIMIT 3)

http://dev.mysql.com/doc/refman/5.7/en/union.html

答案 1 :(得分:0)

MySQL user defined variables一起,你可以做到这一点:

SELECT 
t.*
FROM 
(
    SELECT 
    *,
    IF( @sameCategory = category , @rn := @rn + 1,
         IF(@sameCategory := category, @rn := 1, @rn := 1)
    ) AS rowNumber
    FROM books
    CROSS JOIN (SELECT @sameCategory := 0, @rn := 1) var
    ORDER BY category 
) AS t
WHERE t.rowNumber <= 3
ORDER BY t.category

答案 2 :(得分:0)

您不会在单个查询中使用LIMIT。一种方法使用变量:

select b.*
from (select b.*,
             (@rn := if(@c = category, @rn + 1,
                        if(@c := category, 1, 1)
                       )
             ) as rn
      from books b cross join
           (select @c := -1, @rn := 0) params
      where category in (1, 2, 3)
      order by category
     ) b
where rn <= 3;