这可能在某个地方有答案,但我什至不知道如何搜索。
我有多对多的关系,我想与“最重要的”一对多显示。例如,此查询
SELECT Country.CountryName, FlagColor.Color FROM Country JOIN FlagColor USING (CountryID) WHERE ...;
将返回
CountryName | Color
Ireland | Green
Ireland | Orange
Ireland | White
Italy | Green
Italy | Red
Italy | White
USA | Blue
USA | Red
USA | White
我知道GROUP BY
可以将每种颜色限制为一种颜色,但是可以是其中任何一种。我确定蓝色是最上面的颜色,然后是红色,然后是绿色。所以我想修改上面的查询返回
CountryName | Color
Ireland | Green
Italy | Red
USA | Blue
我该怎么做?如果相关,我正在使用MySQL 5.7。
select
CountryName, Color
from (
SELECT Country.CountryName, FlagColor.Color,
row_number() over(order by
case when FlagColor.Color = 'Blue' then 1 else 2 end) as rn
FROM Country
JOIN FlagColor USING (CountryID)
WHERE ...
) x
where rn = 1