首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql:数行直到值改变

MySql:数行直到值改变
EN

Stack Overflow用户
提问于 2016-01-09 02:47:02
回答 2查看 920关注 0票数 0

我知道如何计算具有特定值的行,但如何在该值更改之前对行进行计数?

例如:

代码语言:javascript
复制
1 cat
2 cat
3 cat
4 dog
5 dog
6 cat
7 cat

我怎么算前三只猫而不算最后两只猫呢?

EN

回答 2

Stack Overflow用户

发布于 2016-01-09 02:51:13

您可以找到不属于猫的第一件事的id,并将id数小于该id:

代码语言:javascript
复制
select count(*)
from t
where id < (select min(t2.id) from t t2 where t2.value <> 'cat');
票数 4
EN

Stack Overflow用户

发布于 2016-01-09 03:14:00

你可以这样做:

代码语言:javascript
复制
SELECT @val := 1;
SELECT COUNT(IF(@val = 1 AND animal = 'cat', @val := 1, @val := NULL)) cnt FROM animals;

这样做的目的是:

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

这样你就能拿到你需要的数了。如果需要行的实际值,可以这样做:

代码语言:javascript
复制
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)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34689186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档