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

Pré-encomendar uma instrução GROUP BY


No MySQL, a maneira mais segura de fazer isso provavelmente envolve variáveis:
select im.*
from (select im.*,
             (@rn := if(@p = platform_type_id, @rn + 1,
                        if(@p := platform_type_id, 1, 1)
                       )
             ) as rn
      from main_itemmaster im cross join
           (select @rn := 0, @p := '') params
      order by platform_type_id, (territory_id = 'US') desc
     ) im
where rn = 1;

O não envolve o uso do recurso MySQL (mis) que permite colunas no SELECT de uma consulta de agregação que não está agregada e não está no GROUP BY .

Aqui é um SQL Fiddle mostrando-o funcionando.

EDITAR:

A propósito da ordem de avaliação das variáveis. Da documentação :

O código acima, tecnicamente, lê a variável na mesma instrução , mas também está na mesma expressão . A semântica de if() (e case que às vezes também uso) garantem a ordem de avaliação das expressões.