SQL ajuda com select

SQL

MySQL

26/11/2016

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:

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

André Vitebo

Curtidas 0

Melhor post

Rafael Oliveira

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

André Vitebo

26/11/2016

A formatação ficou muito ruim aqui. Então resolvi tirar um print
https://ap.imagensbrasil.org/image/pXHzOI
GOSTEI 0
André Vitebo

André Vitebo

26/11/2016

Eu consegui responder utilizando um conceito de subquery no sql. a consulta ficou desta forma:

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

Rafael Oliveira

26/11/2016

É sempre bom poder contribuir!

Vamos que vamos !
GOSTEI 0
POSTAR