我知道如何计算具有特定值的行,但如何在该值更改之前对行进行计数?
例如:
1 cat
2 cat
3 cat
4 dog
5 dog
6 cat
7 cat我怎么算前三只猫而不算最后两只猫呢?
发布于 2016-01-09 02:51:13
您可以找到不属于猫的第一件事的id,并将id数小于该id:
select count(*)
from t
where id < (select min(t2.id) from t t2 where t2.value <> 'cat');发布于 2016-01-09 03:14:00
你可以这样做:
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 (因为@val将不再是1)。
https://stackoverflow.com/questions/34689186
复制相似问题