mysql - 每个指定组选择 n 个随机行

标签 mysql

我正在努力为以下问题找到最佳解决方案。

假设我有一个这样的表“表”:

id    name    report_id
 1    name1    1
 2    name2    3
 3    name3    5
 4    name1    7
 5    name3    8
 ....................

我想为集合中的每个值选择:('name1', 'name2') 10 个随机的唯一行。

当然可以用 union 来做,比如:

(SELECT * FROM Table
WHERE
    name='name1'
ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM Table
WHERE
    name='name2'
ORDER BY RAND() LIMIT 10)

但如果我有 100 个唯一名称,我必须为其选择 10 个随机记录 - 这个查询会有点大。

最佳答案

SQLFiddle demo

select ID,NAME,REPORT_ID
from
(
select *, @row:=if(name=@name,@row,0)+1 as rn, @name:=name from 
(select *,RAND() as trand from t) t1,
(select @row:=0,@name:='') tm2 
order by name,trand
) t2
where rn<=10

关于mysql - 每个指定组选择 n 个随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14854386/

相关文章:

mysql - C3P0 连接池与 MySQL 连接池

mysql - 将 MySQL 表与其自身连接

mysql - 在 MySQL 中更改数据库变量 "character_set_client"

php - mysql_real_escape_string 不适用于后 PHP

mysql - Squeryl utf8mb4 支持

android - 删除时更新项目 ID

mysql - 在 perl 中使用 LOAD DATA INFILE 在 MYSQL 中插入值

mysql - mysql一条语句同时更新两张表

mysql - 数据库查询 : parameterised values or appended values?

mysql - 如何在 SQLyog 中传输数据库?