sql >> Database teknologi >  >> RDS >> Mysql

Forudbestilling af en GROUP BY-erklæring

I MySQL involverer den sikreste måde at gøre dette sandsynligvis på variabler:

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;

Det involverer ikke brug af MySQL (mis)-funktionen, der tillader kolonner i SELECT af en aggregeringsforespørgsel, der ikke er aggregeret og ikke i GROUP BY .

Her er en SQL Fiddle, der viser, at den virker.

EDIT:

Om emnet rækkefølgen af ​​evaluering af variabler. Fra dokumentationen :

Ovenstående kode læser teknisk set variablen i den samme sætning , men det er også i det samme udtryk . Semantikken for if() (og case som jeg nogle gange også bruger) garanterer rækkefølgen af ​​vurderingen af ​​udtrykkene.



  1. LINQ til Entities multiple join

  2. CONCAT med GROUP_CONCAT i mysql

  3. Hvad er et brugerdefineret runtime-billede i Java 9?

  4. MySQL TCP-forbindelse