【问题标题】:How to count rows which has group by clause?如何计算具有 group by 子句的行?
【发布时间】:2020-04-08 21:18:58
【问题描述】:

我编写了以下使用group by 子句的查询

select MAX(r.network->>"$[0].name") , s.server, MAX(s.ipAddr),
    from table1 e
    inner join table2 s
        on e.objectId  = s.envId
    inner join resources r
        on e.objectId  = r.envId    
    inner join tpgs g
        on e.accountId  = g.objectId      
    inner join msgTable a
        on a.id  = (select max(a.id) from msgTable a where a.logId = s.AuditId)  
    GROUP BY s.server 
    ORDER BY dateSubmitted DESC ;

我想count上面查询返回的行数。

以下查询没有给出count

select count(*)
    from table1 e
    inner join table2 s
        on e.objectId  = s.envId
    inner join resources r
        on e.objectId  = r.envId    
    inner join tpgs g
        on e.accountId  = g.objectId      
    inner join msgTable a
        on a.id  = (select max(a.id) from msgTable a where a.logId = s.AuditId)  
    GROUP BY s.server;

【问题讨论】:

  • 什么你要数数?您是指第一个查询返回的行数吗?
  • 在没有任何解释的情况下发布损坏的查询您想要完成的事情不会帮助我们帮助您。你要数什么???
  • 查询不完整但没有损坏。 @GMB 提供了帮助,这正是我所需要的

标签: mysql sql join group-by count


【解决方案1】:

我了解到您想要计算聚合查询返回的行数。

如果是这样,那么你需要另一个级别的聚合,即将你的查询变成一个子查询,然后在外部查询中计数:

select count(*) no_records
from (
    select 1          
    from table1 e
    inner join table2 s
        on e.objectId  = s.envId
    inner join resources r
        on e.objectId  = r.envId    
    inner join tpgs g
        on e.accountId  = g.objectId      
    inner join msgTable a
        on a.id  = (select max(a.id) from msgTable a where a.logId = s.AuditId)  
    group by s.server
) t;

注意:因为我们只想计算我们得到了多少条记录,所以我们实际上不需要SELECT 子句中的其他计算; SELECT 1 就够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2014-11-23
    • 2017-01-16
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多