"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo seleccionar eficientemente las filas superiores por categoría en MySQL sin funciones analíticas?

¿Cómo seleccionar eficientemente las filas superiores por categoría en MySQL sin funciones analíticas?

Publicado el 2024-11-08
Navegar:285

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

Seleccionar filas superiores por categoría en MySQL

Para recuperar un número limitado de filas de cada categoría en una tabla, puede utilizar funciones analíticas . Sin embargo, MySQL no ofrece estas funciones directamente. Sin embargo, es posible emularlas usando variables.

Emulación de funciones analíticas

La siguiente consulta MySQL emula la funcionalidad de funciones analíticas para seleccionar las 3 filas superiores para cada categoría :

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 

Explicación

  • La subconsulta selecciona todas las filas de la tabla TBL_ARTIKUJT e inicializa dos variables de sesión, @rownum y @category, para realizar un seguimiento de la clasificación y categoría actuales.
  • la clasificación asignada a cada fila indica su posición dentro de su categoría. Cuando se encuentra una nueva categoría, la clasificación se restablece a 1.
  • var_category se usa para almacenar la categoría para cada fila.
  • La instrucción SELECT externa filtra la subconsulta, seleccionando solo filas con una clasificación menor o igual a 3.

Este método le permite implementar la funcionalidad deseada sin depender de funciones analíticas, que no son compatibles con MySQL.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3