"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 selecionar com eficiência as principais linhas por categoria no MySQL sem funções analíticas?

Como selecionar com eficiência as principais linhas por categoria no MySQL sem funções analíticas?

Publicado em 2024-11-08
Navegar:345

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

Selecionando as principais linhas por categoria no MySQL

Para recuperar um número limitado de linhas de cada categoria em uma tabela, você pode utilizar funções analíticas . Entretanto, o MySQL não oferece essas funções diretamente. No entanto, é possível emulá-los usando variáveis.

Emulando funções analíticas

A consulta MySQL a seguir emula a funcionalidade de funções analíticas para selecionar as 3 primeiras linhas de cada categoria :

SELECT x.*
FROM (
    SELECT t.*,
    CASE 
        WHEN @category != t.category THEN @rownum := 1 
        ELSE @rownum := @rownum   1 
    END AS rank,
    @category := t.category AS var_category
    FROM TBL_ARTIKUJT t
    JOIN (SELECT @rownum := NULL, @category := '') r
    ORDER BY t.category
) x
WHERE x.rank 

Explicação

  • A subconsulta seleciona todas as linhas da tabela TBL_ARTIKUJT e inicializa duas variáveis ​​de sessão, @rownum e @category, para rastrear a classificação e categoria atuais.
  • a classificação atribuída a cada linha indica sua posição dentro de sua categoria. Quando uma nova categoria é encontrada, a classificação é redefinida para 1.
  • var_category é usada para armazenar a categoria para cada linha.
  • A instrução SELECT externa filtra a subconsulta, selecionando apenas linhas com uma classificação menor ou igual a 3.

Este método permite que você implemente a funcionalidade desejada sem depender de funções analíticas, que não são suportadas pelo MySQL.

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