SQL como fazer vários select em uma única tabela POSTGREE

ola to tentando recuperar varios dados diferentes em uma unica tabela com o seguinte codigo:

select count(id) as tempo15, 
(select count(id) as tempo30 from tb_atend_senhas where tempo_atendimento > (15*60) and tempo_atendimento <= (30*60) group by date(dh_inicio_atendimento) order by date(dh_inicio_atendimento) desc limit 1), 
(select count(id) as tempo45 from tb_atend_senhas where tempo_atendimento > (30*60) and tempo_atendimento <= (45*60) group by date(dh_inicio_atendimento) order by date(dh_inicio_atendimento) desc limit 1),
(select count(id) as tempom45 from tb_atend_senhas where tempo_atendimento > (45*60) group by date(dh_inicio_atendimento) order by date(dh_inicio_atendimento) desc limit 1),
date(dh_inicio_atendimento) as dia 
from tb_atend_senhas where tempo_atendimento < (15*60) group by date(dh_inicio_atendimento) order by date(dh_inicio_atendimento) desc

porem ta vindo com inconsistência, por exemplo na minha tabela só deveria retornar 2 valores no campo tempom45 em 2 dias e o resto deveria vir zero e ta vindo o valor repetido em todos os campos
os dados estao salvos em segundos

Tive dificuldde em perceber o que pretendes, mas parece-me que será isto

SELECT
  (select count(id) from tb_atend_senhas s1 where s1.tempo_atendimento <= (15*60) and s.dh_inicio_atendimento = s1.dh_inicio_atendimento) as tempo15, 
  (select count(id) from tb_atend_senhas s2 where s2.tempo_atendimento > (15*60) and s2.tempo_atendimento <= (30*60) and s.dh_inicio_atendimento = s2.dh_inicio_atendimento) as tempo30, 
  (select count(id) from tb_atend_senhas s3 where s3.tempo_atendimento > (30*60) and s3.tempo_atendimento <= (45*60) and s.dh_inicio_atendimento = s3.dh_inicio_atendimento) as tempo45, 
  (select count(id) from tb_atend_senhas s4 where s4.tempo_atendimento > (45*60) and s.dh_inicio_atendimento = s4.dh_inicio_atendimento) as tempom45,
  date(s.dh_inicio_atendimento) as dia 
from tb_atend_senhas s
group by date(s.dh_inicio_atendimento) 
order by date(s.dh_inicio_atendimento) desc
1 curtida

tenho que selecionar a quantidade de atendimentos ate 15min, entre 15 e 30 min, entre 30 e 45 min e com mais de 45 min em cada dia, essa tua query retornou um erro parecido com o q to tendo, vem todas as linhas com o valor repetido

Olha só, pra facilitar a vida de quem quer te ajudar, coloca o esquema, alguns dados de exemplo e o resultado que você espera aqui https://www.db-fiddle.com/

Daí passa o link pra gente.

1 curtida

mais ou menos isso

https://www.db-fiddle.com/f/6rnAQiimymTBPhtmCeAn5n/0

tentei o codigo do pmlm no mysql com phpmyadmin e deu certinho do jeito que eu queria, mas no postgresql vem o seguinte erro: SQL Error [42803]: ERROR: subquery uses ungrouped column “s.dh_inicio_atendimento” from outer query
Position: 95

Segui a lógica das subqueries que tinhas mas talvez se possa colocar tudo numa query

SELECT sum(case when tempo_atendimento <= (15*60) then 1 else 0 end) as tempo15, 
       sum(case when tempo_atendimento > (15*60) and tempo_atendimento <= (30*60) then 1 else 0 end) as tempo30, 
       sum(case when tempo_atendimento > (30*60) and tempo_atendimento <= (45*60) then 1 else 0 end) as tempo45, 
       sum(case when tempo_atendimento > (45*60) then 1 else 0 end) as tempom45, 
       date(dh_inicio_atendimento) as dia 
  from tb_atend_senhas
 group by date(dh_inicio_atendimento) 
 order by date(dh_inicio_atendimento) desc

deu certinho amigo, obrigado