Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Resolução - MAX ou ORDER BY DESC ?

Segue a resolução do problema, visto que muitos utilizam a função de agregação MAX. Desta vez utilizei ORDER BY DES. Na questão de desempenho / performance do banco, qual a melhor maneira de utilização, MAX ou ORDER BY DESC?

create TABLE ALUNOS(
  ID_ALUNO INTEGER PRIMARY KEY AUTOINCREMENT,
  NOME VARCHAR (150) NOT NULL,
  CURSO VARCHAR (200) NOT NULL
);

CREATE TABLE NOTAS(
  ID_NOTA INTEGER PRIMARY KEY AUTOINCREMENT,
  FKID_ALUNO INT,
  NOTA FLOAT (10,2),
  FOREIGN KEY (FKID_ALUNO) REFERENCES ALUNOS(ID_ALUNO) ON DELETE CASCADE
);

INSERT INTO ALUNOS (NOME, CURSO) VALUES ('Ana Paula Silva', 'Engenharia de Software'),
('Bruno Marques', 'Ciência da Computação'),
('Carlos Alberto Souza', 'Engenharia de Software'),
('Daniela Fernandes', 'Sistemas de Informação'),
('Eduardo Lima', 'Análise e Desenvolvimento de Sistemas'),
('Fernanda Oliveira', 'Engenharia de Computação'),
('Gustavo Ferreira', 'Redes de Computadores'),
('Helena Costa', 'Engenharia de Software'),
('Isabela Mendes', 'Sistemas de Informação'),
('João Pedro Santos', 'Análise e Desenvolvimento de Sistemas');

INSERT INTO NOTAS (FKID_ALUNO, NOTA) VALUES (1, 8.5),
 (2, 7.3),
 (3, 9.0),
 (4, 6.7),
 (5, 8.2),
 (6, 7.5),
 (7, 9.1),
 (8, 6.9),
 (9, 8.8),
 (10, 7.2),
 (11, 9.5);
 

SELECT NOME, CURSO FROM ALUNOS WHERE ID_ALUNO = (SELECT fkid_aluno FROM NOTAS ORDER BY NOTA DESC LIMIT 1);

Sempre que crio uma FOREIGN KEY, para melhor identificação sempre utilizo fkid_(nome da coluna). É uma dica que acredito ajudar bastante.

1 resposta
solução!

Boa noite, Douglas! Tudo bem com você?

Agradeço por compartilhar a sua solução para o exercício de encontrar a maior nota e a sua pergunta sobre o desempenho deMAX versus ORDER BY DESC, seu questionamento é muito válido. Para a maioria dos casos em que você só precisa encontrar o maior valor de uma coluna, a função MAX é geralmente a melhor escolha em termos de desempenho e clareza. No entanto, a abordagem com ORDER BY DESC pode ser útil em situações onde você precisa de mais flexibilidade ou quando está trabalhando com múltiplas colunas e critérios. Vamos analisar as duas abordagens:

Usando MAX

A função de agregação MAX é geralmente a maneira mais direta e eficiente para encontrar o valor máximo em uma coluna trazendo as seguintes vantagens:

  • Simplicidade e clareza na intenção: Está claro que você está procurando o maior valor.
  • Performance geralmente melhor em bancos de dados otimizados para funções de agregação, já que o banco de dados pode usar índices de maneira eficiente.

Usando ORDER BY DESC com LIMIT

Utilizando a abordagem do ORDER BY DESC para classificar as notas e LIMIT 1 para pegar a nota mais alta, temos as seguintes vantagens:

  • Pode ser útil quando você precisa de outros dados associados à linha com a maior nota (por exemplo, quando o valor máximo é apenas uma parte do que você precisa).
  • Flexibilidade para modificar e adicionar critérios adicionais de ordenação, se necessário.

Considerações de performance

  • MAX: Em muitos casos, usar a função MAX é mais eficiente porque a função é projetada especificamente para esse propósito. Os bancos de dados muitas vezes otimizam essa operação e podem usar índices para obter o resultado rapidamente
  • ORDER BY DESC com LIMIT: Esta abordagem pode ser menos eficiente, especialmente se houver muitas linhas para classificar. Classificar todas as linhas pode ser mais custoso em termos de desempenho, embora LIMIT ajude a mitigar isso ao limitar o número de resultados retornados.

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado