Mysql
 sql >> Datenbank >  >> RDS >> Mysql

GROUP BY Bestellung

Aus den Kommentaren und dem Hinzufügen von SqlFiddle geht hervor, dass Sie tatsächlich eine partitionierte Zeilennummer mit einem Vorrang von US pro Plattform erstellen und dann den ersten Datensatz auswählen möchten. Eine Möglichkeit, partitionierte Zeilennummern in MySQL zu erstellen, besteht darin, Variablen zu verwenden. Hier ein Beispiel:

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-Geige:http://sqlfiddle.com/#!9/81c3b6/12

Im Grunde partitioniert dies die Zeilennummer nach Plattform, ordnet US vor jedem anderen Gebiet an und wählt dann die erste Zeile für jede Plattform aus. Die einzige Frage/Trick ist, wie wählen Sie aus, was zurückgegeben werden soll, wenn US für die Plattform nicht verfügbar ist, einfach die aufsteigende alphabetische Reihenfolge der territorial_id?