我有一个这样的表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/