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

ГРУПИРАНЕ ПО поръчка

Така че от коментарите и добавянето на SqlFiddle всъщност изглежда, че искате да създадете разделен номер на ред с приоритет на US за платформа и след това да изберете първия запис. Един от начините за създаване на разделени номера на редове в mysql е използването на променливи, ето пример:

SELECT
  territory_id
  ,platform_type_id
  ,store_url
FROM
( SELECT
    *
    ,@PlatFormRowNum:= IF(@prevplatform = platform_type_id, @PlatFormRowNum + 1, 1) as PlatformRowNum
    ,@prevplatform:= platform_type_id
  FROM
    main_itemmaster m
    CROSS JOIN (SELECT @prevplatform:='',@PlatFormRowNum=0) var
  ORDER BY
    platform_type_id
    ,CASE WHEN territory_id = 'US' THEN 0 ELSE 1 END
    ,territory_id
) t
WHERE
  t.PlatformRowNum = 1
ORDER BY
  t.platform_type_id

SQL Fiddle:http://sqlfiddle.com/#!9/81c3b6/12

По принцип това разделя номера на реда по платформа, нарежда US преди всяка друга територия и след това избира първия ред за всяка платформа. Единственият въпрос/трик е как избирате кое да върнете, когато US не е налично за платформата, просто възходящ азбучен ред на teritorij_id?




  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. Как мога да импортирам голям (14 GB) MySQL файл за дъмп в нова база данни на MySQL?

  3. Какви са разликите между mysql-connector-python, mysql-connector-python-rf и mysql-connector-repackaged?

  4. Трябва ли SELECT ... FOR UPDATE винаги да съдържа ORDER BY?

  5. Как да изпълня две заявки за актуализиране в планировчика на събития на mysql?