sql >> Databáze >  >> RDS >> Mysql

Předobjednávka výpisu GROUP BY

V MySQL je nejbezpečnější způsob, jak toho dosáhnout, pravděpodobně pomocí proměnných:

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;

Nezahrnuje použití (nesprávné) funkce MySQL, která povoluje sloupce v SELECT agregačního dotazu, které nejsou agregované a nejsou v GROUP BY .

Zde je SQL Fiddle, který ukazuje, že to funguje.

EDIT:

K tématu pořadí hodnocení proměnných. Z dokumentace :

Výše uvedený kód technicky čte proměnnou ve stejném příkazu , ale je také ve stejném výrazu . Sémantika if() (a case které někdy také používám) zaručují pořadí vyhodnocení výrazů.



  1. The Zombie PerfMon Counter That Never Die!

  2. PHP a MySQL včetně tlačítka Delete na stejné stránce

  3. Seskupit po měsíci včetně prázdných měsíců

  4. PHP bezpečná uživatelská proměnná