SQL ajuda com select
Boa tarde pessoal!
Estou com dificuldade em responder um select de um trabalho da faculdade.
É sobre transporte de ônibus da cidade e eu preciso responder a seguinte pergunta:
Para isso criei essa view:
create view tg
as select
r.nome as 'nome_regiao',
l.numero_linha as 'numero_linha',
l.nome as 'nome_linha',
v.hora_viagem as 'hora_viagem',
v.data_viagem as 'data_viagem'
from linhas l
inner join viagens v
on l.id_linha = v.id_linha
inner join trajetos t
on l.id_linha = t.id_linha
inner join bairros b
on t.id_bairro = b.id_bairro
inner join regioes r
on b.id_regiao = r.id_regiao;
E montei esse select:
select nome_regiao, numero_linha, count(distinct hora_viagem) as 'qtd_horario'
from tg
where weekday(data_viagem) < 5
group by nome_regiao, numero_linha
order by qtd_horario desc, numero_linha;
Com esse select eu consigo trazer todas as linhas de todas as regiões e a quantidade de
horários que cada uma tem cadastrada. Mas eu preciso mostrar apenas a linha que contem mais
horários cadastrado de cada região. Eu consigo fazer isso utilizando apenas um select?
Estou com dificuldade em responder um select de um trabalho da faculdade.
É sobre transporte de ônibus da cidade e eu preciso responder a seguinte pergunta:
Qual é a linha, de cada região, que possui maior número de horário nos dias úteis?
Para isso criei essa view:
create view tg
as select
r.nome as 'nome_regiao',
l.numero_linha as 'numero_linha',
l.nome as 'nome_linha',
v.hora_viagem as 'hora_viagem',
v.data_viagem as 'data_viagem'
from linhas l
inner join viagens v
on l.id_linha = v.id_linha
inner join trajetos t
on l.id_linha = t.id_linha
inner join bairros b
on t.id_bairro = b.id_bairro
inner join regioes r
on b.id_regiao = r.id_regiao;
E montei esse select:
select nome_regiao, numero_linha, count(distinct hora_viagem) as 'qtd_horario'
from tg
where weekday(data_viagem) < 5
group by nome_regiao, numero_linha
order by qtd_horario desc, numero_linha;
Com esse select eu consigo trazer todas as linhas de todas as regiões e a quantidade de
horários que cada uma tem cadastrada. Mas eu preciso mostrar apenas a linha que contem mais
horários cadastrado de cada região. Eu consigo fazer isso utilizando apenas um select?
André Vitebo
Curtidas 0
Melhor post
Rafael Oliveira
27/12/2016
Mas eu preciso mostrar apenas a linha que contem mais horários cadastrado de cada região. Eu consigo fazer isso utilizando apenas um select?
Bom dia André,
utilize a função top(1), seu código ficaria assim:
SELECT TOP(1) NOME_REGIAO, NUMERO_LINHA, COUNT(DISTINCT HORA_VIAGEM) AS 'QTD_HORARIO' FROM TG WHERE WEEKDAY(DATA_VIAGEM) < 5 GROUP BY NOME_REGIAO, NUMERO_LINHA ORDER BY QTD_HORARIO DESC, NUMERO_LINHA
Bom estudo e espero ter ajudado.
GOSTEI 1
Mais Respostas
André Vitebo
26/11/2016
A formatação ficou muito ruim aqui. Então resolvi tirar um print
https://ap.imagensbrasil.org/image/pXHzOI
https://ap.imagensbrasil.org/image/pXHzOI
GOSTEI 0
André Vitebo
26/11/2016
Eu consegui responder utilizando um conceito de subquery no sql. a consulta ficou desta forma:
Mas de qualquer forma te agradeço muito pela disposição em me ajudar! muito obrigado :D
select distinct nome_regiao, numero_linha, nome_linha, qtd_horarios from transporte_horarios r1 where r1.qtd_horarios = (select max(r2.qtd_horarios) from transporte_horarios r2 where r1.nome_regiao = r2.nome_regiao) order by nome_regiao;
Mas de qualquer forma te agradeço muito pela disposição em me ajudar! muito obrigado :D
GOSTEI 1
Rafael Oliveira
26/11/2016
É sempre bom poder contribuir!
Vamos que vamos !
Vamos que vamos !
GOSTEI 0