我有一个这样的表usercolor

 id  | idUser  | color
-----------------------
 1   |  1      | red
 2   |  1      | blue
 3   |  2      | green
 4   |  2      | blue
 5   |  3      | null
 6   |  3      | blue
 7   |  4      | null


我想为每个idUser提供一种随机拟合的颜色,该颜色在任何可能的情况下都不为null。像这样:

idUser | color
---------------
1      | blue
2      | green
3      | blue
4      | null


我以为我可以做到

SELECT idUser, color FROM usercolor GROUP BY idUser


但是,使用此SQL可能会发生idUser 3映射为null的情况,尽管该idUser存在蓝色。我该如何预防?

最佳答案

如果您希望每个用户使用一种随机颜色,那么就会想到一个相关的子查询:

select idUser,
       (select uc.color
        from usercolor uc
        where uc.idUser = u.idUser and uc.color is not null
        order by rand()
        limit 1
       ) as color
from (select distinct idUser from usercolor) u  -- you can use `users` here instead

关于mysql - 按随机非空条目分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40894984/

10-09 21:55