如果排名 1 的记录符合高 MySQL 的条件,则分配用户的所有记录"高"或"低"



我有一个包含多个USERid的表,我使用分区按用户id和日期排序。现在我想这样做:如果用户的第一个记录(即排名1的记录)在速度上有"100x",我为这个用户的所有记录创建一个"高"的列,否则为用户的所有记录创建一个"低"的列。我如何在mysql中做到这一点?

<表类> USERid 。 。 速度 tbody><<tr> 1日期。190 x1日期。215 x。2 b日期。1100 x2 b日期。330 x1 c日期。1100 x1 c日期。23 x。

test this:

SELECT t1.*, 
CASE WHEN t2.userid 
THEN 'high' 
ELSE 'low' 
END rating
FROM table t1
LEFT JOIN ( SELECT 
FROM table t2
WHERE `rank` = 1
AND speed = '100x' ) t3 USING (userid);

SELECT t1.*,
CASE WHEN EXISTS ( SELECT NULL
FROM table t2
WHERE t1.userid = t2.userid
AND `rank` = 1
AND speed = '100x )
THEN 'high'
ELSE 'low' 
END rating
FROM table t1;

您可以使用FIRST_VALUE()窗口函数:

SELECT *,
CASE 
WHEN FIRST_VALUE(speed) OVER (PARTITION BY USERid ORDER BY date) = '100x' -- or ORDER BY `rank`
THEN 'high' 
ELSE 'low' 
END rating
FROM tablename

最新更新