mysql-从每个id中选择一个随机行

问题描述 投票:0回答:2

我在数据库中有一个表,该表有2列:idcolor。每个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 sql select subquery greatest-n-per-group
2个回答
0
投票

如果您正在运行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

0
投票

您可以尝试:

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表示您有未聚合的列。那应该是编译时错误。

© www.soinside.com 2019 - 2024. All rights reserved.