MySql:计算行直到值更改

时间:2016-01-09 02:47:02

标签: mysql sql counting

我知道如何计算具有特定值的行,但是如何计算行直到该值发生变化?

例如:

srand

如果不计算最后两只猫,我怎么算前三只猫?

2 个答案:

答案 0 :(得分:3)

你可以找到一只猫的第一件事的id并且计算的ID少于:

select count(*)
from t
where id < (select min(t2.id) from t t2 where t2.value <> 'cat');

答案 1 :(得分:1)

您可以这样做:

SELECT @val := 1;
SELECT COUNT(IF(@val = 1 AND animal = 'cat', @val := 1, @val := NULL)) cnt FROM animals;

这是做什么的:

  • 将变量@val初始化为1。
  • 对于匹配if条件的每一行,返回1;否则返回NULL。
  • 计算(非NULL)行的数量。

这将为您提供所需的计数。如果您需要行的实际值,可以执行以下操作:

SELECT @val := 1;
SELECT * FROM (
        SELECT id, animal, IF(@val = 1 AND animal = 'cat', @val := 1, @val := NULL) ok FROM animals
    ) _animals WHERE ok = 1;

if语句的作用是什么,只要@val = 1(初始条件)并且你正在看猫,将@val设置为1并返回1.只要动物不再是cat,@ val变为NULL,这意味着所有未来的行也将返回NULL(因为@val将不再是1)。