我想在表上使用“group by”执行查询,但是希望对将为每个组选择的记录应用3个规则。这可能吗?使用Mysql SGBD。
idMatch Country VideoType VideoId
1 Pt High vidZbr
1 Pt High vidXpto
1 Pt low vioptr
1 Pt normal vidfff
2 Pt low vidfgg
2 Pt normal vid
3 Pt low videop
示例:
SELECT * FROM videos_extended where country = 'Pt' group by idMatch;
通缉分组规则的结果:(如果存在则添加视频'高'如果存在则添加视频'正常'或如果此'idMatch'组的所有其他操作都失败则为'低'
idMatch Country VideoType VideoId
1 Pt High vidZbr
2 Pt normal vid
3 Pt low videop
答案 0 :(得分:1)
这将为行选择两行:“1”,“Pt”,“高”。如果您指定如何选择VideoId,则可以进行改进:
select *
from videos_extended video inner join
(
select idMatch, Country,
min(case VideoType
when 'high' then 1
when 'normal' then 2
when 'low' then 3
else 4
end
) rank
from videos_extended
group by idMatch, Country
) maxType
on maxType.idMatch = video.idMatch
and maxType.Country = video.Country
and maxType.rank = (
case video.VideoType
when 'high' then 1
when 'normal' then 2
when 'low' then 3
else 4
end
)
答案 1 :(得分:0)
如果VideoType是整数会更好,否则您可以使用CASE或此查询:
SELECT idMatch, Country, VideoType, MAX(VideoId) AS MVidId FROM videos_extended INNER JOIN (SELECT idMatch AS idm, MIN(SUBSTRING(VideoType, 3, 1)) AS vv FROM videos_extended GROUP BY idMatch, Country) AS T ON idMatch = idm AND SUBSTRING(VideoType, 3, 1) = vv GROUP BY idMatch, Country, VideoType