Mysql
 sql >> Base de données >  >> RDS >> Mysql

GROUPER PAR commande

Ainsi, d'après les commentaires et l'ajout de SqlFiddle, il semble en fait que vous souhaitiez créer un numéro de ligne partitionné avec une priorité sur US par plate-forme, puis sélectionner le premier enregistrement. Une façon de faire des numéros de ligne partitionnés dans mysql est d'utiliser des variables, voici un exemple :

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

Fondamentalement, cela partitionne le numéro de ligne par plate-forme, commande les États-Unis avant tout autre territoire, puis sélectionne la première ligne pour chaque plate-forme. La seule question/astuce est de savoir comment choisir lequel renvoyer lorsque les États-Unis ne sont pas disponibles pour la plate-forme, simplement l'ordre alphabétique croissant du territorial_id ?