Preceptor 3 Denunciar post Postado Maio 17, 2014 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.serieFROM aluno AS t1LEFT JOIN sala AS t2 ON t1.sala = t2.idLEFT JOIN serie AS t3 ON t1.serie = t3.idORDER BY t1.serie, t1.sala, t1.notaLIMIT 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
jgustavo99 85 Denunciar post Postado Maio 17, 2014 Tenta assim: SELECT nota FROM aluno ORDER BY DESC LIMIT 5 Espero ter Ajudado! Compartilhar este post Link para o post Compartilhar em outros sites
Preceptor 3 Denunciar post Postado Maio 17, 2014 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
Motta 645 Denunciar post Postado Maio 17, 2014 Select the top N rows from each group http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ Isto deve ajudar, solução clássica com count, não posto a query pois é quase impossivel editar sql num tablet ... Compartilhar este post Link para o post Compartilhar em outros sites
Preceptor 3 Denunciar post Postado Maio 17, 2014 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