Как посчитать строки, у которых есть group by? - PullRequest
0 голосов
/ 09 апреля 2020

Я написал следующий запрос, который использовал 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;

1 Ответ

1 голос
/ 09 апреля 2020

Я понимаю, что вы хотите посчитать количество строк, возвращаемых агрегированным запросом.

Если это так, то вам нужен другой уровень агрегирования, ie превратить ваш запрос в подзапрос, а затем считать во внешнем запросе:

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 достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...