"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como filtrar dados com base na contagem no MySQL sem usar Nested SELECT?

Como filtrar dados com base na contagem no MySQL sem usar Nested SELECT?

Publicado em 2024-11-14
Navegar:315

How to Filter Data Based on Count in MySQL Without Using Nested SELECT?

MySQL - Usando COUNT(*) na cláusula WHERE

Um usuário encontrou um desafio ao tentar filtrar dados no MySQL usando a função COUNT(*) na Cláusula WHERE. Eles buscaram um método eficiente para realizar essa tarefa sem usar uma instrução SELECT aninhada, pois ela pode consumir recursos significativos.

O usuário apresentou o seguinte pseudocódigo para ilustrar o resultado desejado:

SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC

O problema com esta abordagem é que o MySQL não suporta funções agregadas, como COUNT(*), na cláusula WHERE. Para contornar essa limitação, o usuário explorou a possibilidade de usar um SELECT aninhado para contar o número de linhas de cada gid exclusivo e depois filtrar os resultados de acordo. No entanto, esse método foi considerado ineficiente e que consome muitos recursos.

Felizmente, o MySQL fornece uma solução mais otimizada usando as cláusulas GROUP BY e HAVING:

SELECT gid
FROM `gd`
GROUP BY gid 
HAVING COUNT(*) > 10
ORDER BY lastupdated DESC

Esta consulta executa as seguintes etapas:

  1. Agrupa as linhas na tabela gd pela coluna gid.
  2. Calcula a contagem de linhas para cada grupo gid usando a função COUNT(*).
  3. Usa a cláusula HAVING para filtrar os resultados e retornar apenas esses grupos com uma contagem maior que 10.
  4. Classifica o resultado final em ordem decrescente com base na última coluna atualizada.

Ao aproveitar as cláusulas GROUP BY e HAVING, essa abordagem atinge efetivamente o desejado resultado sem recorrer a uma instrução SELECT aninhada, resultando em melhor desempenho e eficiência.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3