首页 > 解决方案 > 从SELECT子句的结果中选择符合条件的MYSQL5.7系列

问题描述

我想做的事

在MYSQL5.7系列中,我想从SELECT子句的结果中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
   , 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
) as y;

标签: mysqlsqlcountsumsubquery

解决方案


表达的直接问题count(y.n = 1)。条件返回一个0or 1,这两个都被计算 -只count()忽略null值。你可以sum(y.n - 1)改用。

我不确定查询的目的。基本上这b_id按降序排列具有相同的记录 - 那么你想计算有多少记录排在第一位?b_id这相当于只计算表中存在多少 distinct 。如果是这样,您可以简单地将其表述为:

select count(distinct b_id) 
from a 

推荐阅读