MYSQL - 限制超过计数大小的记录数量

时间:2015-08-02 15:32:42

标签: mysql sql

我目前有一个查询计算每行的'parent_id'值,并在每行中添加它。

例如,如果我有4条记录在'parent_id'下具有值'1432',那么它将在'count'列下显示计数值4。

我试图根据计数来限制行数。

例如,假设我们想要将每个'parent_id'的记录数超过2.如果'parent_id'已达到第三个记录,它只是传递,它不会返回该记录。

现有表格的示例:

ID parent_id count(parent_id)
1  1234      2
2  1234      2
3  3221      3
4  3221      3
5  3221      3
6  5432      1
7  4312      1

我想得到的结果是:

ID parent_id count(parent_id)
1  1234      2
2  1234      2
3  3221      2
4  3221      2
5  5432      1
6  4312      1

2 个答案:

答案 0 :(得分:1)

这是每组选择查询:

SELECT id, parent_id, rn
FROM (
    SELECT @rn:=CASE WHEN @parent_id=parent_id
                             THEN @rn+1                                
                             ELSE 1                          
                        END AS rn
         , @parent_id:=parent_id AS parent_id
        , id     
    FROM t, (SELECT @rn:=0,@parent_id:='') AS u

    ORDER BY parent_id,id 
) as s 
WHERE rn <= 2

FIDDLE

答案 1 :(得分:0)

Mihai的回答可能有效,但不能保证有效。问题是MySQL不保证select中表达式的评估顺序。并且,甚至有时候它没有按照预期的顺序对它们进行评估。

因此,在使用变量时,最安全的做法是将所有赋值放在一个表达式中:

SELECT id, parent_id, rn
FROM (SELECT (@rn := if(@parent_id = parent_id, @rn + 1,
                        if(@parent_id := parent_id, 1, 1)
                       )
             ) as rn,
             t.*   
      FROM t CROSS JOIN
           (SELECT @rn := 0, @parent_id := '') params
      ORDER BY parent_id, id 
     ) t
WHERE rn <= 2;