我在数据库中有一个表,该表有2列:id
和color
。每个id
可能具有多行,其中color
的值不同。因此例如:
id color
--------------
1 black
1 white
1 green
2 yellow
3 red
3 black
我想为每个id
只选择一行,但要随机选择。我已经尝试使用两个选择查询,但是它总是返回每个id的第一行。有什么问题?!
SELECT * FROM (SELECT * FROM collections ORDER BY RAND()) AS a
GROUP BY id
如果您正在运行MySQL 8.0,则可以使用窗口功能:
select id, color
from (
select c.*, row_number() over(partition by id order by rand()) rn
from collections c
) c
where rn = 1
您可以尝试:
select t.*
from t
where t.color = (select t2.color
from t t2
where t2.id = t.id
order by rand()
limit 1
);
为了提高性能,您可以尝试在(id, color)
上建立索引。
您的代码根本不起作用。它使用select *
和group by
表示您有未聚合的列。那应该是编译时错误。