Mysql
 sql >> Base de données >  >> RDS >> Mysql

Précommander une instruction GROUP BY

Dans MySQL, le moyen le plus sûr de le faire implique probablement des variables :

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;

Cela n'implique pas l'utilisation de la fonctionnalité MySQL (mis) qui autorise les colonnes dans le SELECT d'une requête d'agrégation non agrégées et non dans le GROUP BY .

Ici est un SQL Fiddle montrant qu'il fonctionne.

MODIFIER :

Au sujet de l'ordre d'évaluation des variables. À partir de la documentation :

Le code ci-dessus lit, techniquement, la variable dans la même instruction , mais c'est aussi dans la même expression . La sémantique de if() (et case que j'utilise aussi parfois) garantissent l'ordre d'évaluation des expressions.