Mysql
 sql >> база данни >  >> RDS >> Mysql

Предварителна поръчка на изявление GROUP BY

В MySQL най-сигурният начин да направите това вероятно включва променливи:

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;

Не включва използването на функцията MySQL (неправилно), която позволява колони в SELECT на заявка за агрегиране, които не са агрегирани и не са в GROUP BY .

Тук е SQL Fiddle, който показва, че работи.

РЕДАКТИРАНЕ:

По темата за реда за оценка на променливите. От документацията :

Технически горният код чете променливата в същия изявление , но също така е в същия израз . Семантиката на if()case които понякога също използвам) гарантират реда на оценка на изразите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изберете времеви печат, по-стар от

  2. Не мога да извлека стойността, която исках да избера с помощта на запаметена процедура

  3. Най-добрият начин да получите първия и последния ден от миналия месец?

  4. получаване на данни от две таблици в mysql, присъединяването няма да работи тук

  5. Вмъкнете запис в таблица с позиция, без да актуализирате полето за позиция на всички записи