我知道如何计算具有特定值的行,但是如何计算行直到该值发生变化?
例如:
srand
如果不计算最后两只猫,我怎么算前三只猫?
答案 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;
这是做什么的:
这将为您提供所需的计数。如果您需要行的实际值,可以执行以下操作:
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)。