Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Preceptor

Buscar 5 melhores alunos de cada sala

Recommended Posts

Preciso encontrar as 5 melhores notas de cada sala, sendo que existem de 5 a 6 salas para cada série. Alguem pode me dar uma luz?

 

 

SELECT t1.nota, t2.sala, t3.serie
FROM aluno AS t1
LEFT JOIN sala AS t2 ON t1.sala = t2.id
LEFT JOIN serie AS t3 ON t1.serie = t3.id
ORDER BY t1.serie, t1.sala, t1.nota
LIMIT 0 , 30

 

CREATE TABLE IF NOT EXISTS `aluno` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`serie` int(11) NOT NULL,
`sala` int(11) NOT NULL,
`nota` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

--
-- Extraindo dados da tabela `aluno`
--

INSERT INTO `aluno` (`id`, `serie`, `sala`, `nota`) VALUES
(1, 1, 2, 9),
(2, 1, 2, 10),
(3, 2, 2, 8),
(4, 2, 2, 9),
(5, 1, 2, 10),
(6, 5, 2, 10),
(7, 3, 3, 8),
(8, 3, 3, 9),
(9, 3, 3, 10),
(10, 3, 3, 10);

-- --------------------------------------------------------

--
-- Estrutura da tabela `sala`
--

CREATE TABLE IF NOT EXISTS `sala` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`serie` varchar(50) NOT NULL,
`sala` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Extraindo dados da tabela `sala`
--

INSERT INTO `sala` (`id`, `serie`, `sala`) VALUES
(1, '1', '1-101'),
(2, '1', '1-102'),
(3, '1', '1-103'),
(4, '1', '1-104'),
(5, '2', '2-101'),
(6, '2', '2-102'),
(7, '2', '2-103'),
(8, '2', '2-104');

-- --------------------------------------------------------

--
-- Estrutura da tabela `serie`
--

CREATE TABLE IF NOT EXISTS `serie` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`serie` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Extraindo dados da tabela `serie`
--

INSERT INTO `serie` (`id`, `serie`) VALUES
(1, '1 ano'),
(2, '2 ano');

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, mas só retorna as 5 melhores notas, preciso encontrar as melhores notas de cada sala

Atualmente retorna assim
nota    sala    serie
9       1-102   1 ano
8.9     1-102   1 ano
9.1     1-102   1 ano
8.2     1-201   2 ano
9       1-201   2 ano
7.8     1-201   2 ano
9       1-303   3 ano
10      1-303   3 ano
8.7     1-303   3 ano
10      1-102   1 ano

Preciso do retorno assim

nota    sala    serie
10      1-102   1 ano
9.1     1-102   1 ano
8.2     1-201   2 ano
9       1-201   2 ano
9       1-303   3 ano
10      1-303   3 ano
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelo dica, havia conseguindo um caminho usando union_all


set @num := 0, @salas := '';
select t1.id, t3.serie,t2.sala, t1.nome,t1.nota,t1.sala,
      @num := if(@salas = t1.sala, @num + 1, 1) as row_number,
      @cols := t1.sala as dummy
from aluno AS t1
LEFT JOIN sala AS t2 on t1.sala = t2.id
LEFT JOIN serie AS t3 on t1.serie = t3.id
WHERE t2.id IN(10,11,12) AND t1.nota >='8'
having dummy <=11
ORDER BY t3.serie ASC,t2.sala ASC, t1.nota DESC,nome ASC

Esse foi o resultado final

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.