从SELECT子句的结果中选择与条件匹配的MYSQL5.7系列 我想做什么我创建的代码此代码的结果我尝试过的

问题描述

我想做什么

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)的直接问题。条件返回01,它们都被计数-count()仅忽略null值。您可以改用sum(y.n - 1)

我不确定查询的目的。基本上,这会按降序对具有相同b_id的记录进行排名-那么您想算一下最先排名的记录是多少?这相当于只计算表中存在多少个不同的b_id。如果是这样,您可以简单地将其表达为:

select count(distinct b_id) 
from a