Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta MySql:selecione as 3 principais linhas da tabela para cada categoria


LIMIT apenas interrompe o número de resultados que a instrução retorna. O que você está procurando geralmente é chamado de funções analíticas/de janela/ranking - que o MySQL não suporta, mas você pode emular usando variáveis:
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 <= 3

Se você não alterar SELECT x.* , o conjunto de resultados incluirá o rank e var_category valores - você terá que especificar as colunas que você realmente deseja se esse não for o caso.