问题描述
我想做什么
在MysqL5.7系列中,我想从SELECT子句的结果中选择满足条件的项目,但是我不能选择。
我创建的代码
select
b_id,created_at,(select count(*)+1
from a
where b_id = x.b_id and created_at > x.created_at
) as n
from a as x
order by x.b_id,x.created_at desc
;
此代码的结果
运行上面的代码将产生以下结果。我想修改上面的代码以将n = 1计数为以下结果,但是我不确定如何。
b_id created_at n
1 20/07/18 22:47 1
2 20/03/24 06:08 1
5 20/08/30 19:25 1
6 20/08/29 14:53 2
6 20/08/27 00:00 3
我尝试过的
我认为可以通过如下方式将select子句包含在子查询中并用条件对选择结果进行计数来获得它,但是我做不到。
select
count(y.n = 1)
from(
select
b_id,(select count(*)+1
from a
where b_id = x.b_id and created_at > x.created_at
) as n
from a as x
order by x.b_id,x.created_at desc
) as y;
解决方法
表达式count(y.n = 1)
的直接问题。条件返回0
或1
,它们都被计数-count()
仅忽略null
值。您可以改用sum(y.n - 1)
。
我不确定查询的目的。基本上,这会按降序对具有相同b_id
的记录进行排名-那么您想算一下最先排名的记录是多少?这相当于只计算表中存在多少个不同的b_id
。如果是这样,您可以简单地将其表达为:
select count(distinct b_id)
from a