选择sqlite中的随机记录组
我似乎无法理解这件事。我在SQlite中有一个表,我需要从中为每个组选择一个随机记录。因此,考虑如下表格:选择sqlite中的随机记录组,sql,sqlite,select,random,Sql,Sqlite,Select,Random,我似乎无法理解这件事。我在SQlite中有一个表,我需要从中为每个组选择一个随机记录。因此,考虑如下表格: id link chunk 2 a me1 3 b me1 4 c me1 5 d you2 6 e you2 7 f
id link chunk
2 a me1
3 b me1
4 c me1
5 d you2
6 e you2
7 f you2
我需要为每个区块返回一个随机链接值的sql。所以有一次我运行它时会给出:
也许下次吧
我知道类似的问题已经得到了回答,但我没有找到一个适用于这里的推导
更新:
坚果,后续问题:所以现在我需要排除新字段qcinfo设置为“Y”的行
当然,每当随机ID碰到qcinfo='Y'时,这会隐藏行,这是错误的。我需要在区块中排除该行,但如果任何记录具有qcinfo“Y”,则仍然会为区块生成一个随机记录
有点老套,但它很管用。。。请参阅sql fiddle 对不起,我以为你说的是MySQL。 下面是SQLite的提琴和代码
注意,当我们在没有聚合的情况下执行group by时,SQLite返回与组对应的第一个值 运行,你会得到这个
me1 | a
you2| d
现在,您可以通过对表进行随机排序,然后分组,使第一个值成为随机值。这是最终的解决方案
select link, chunk from (select * from table order by random()) group by chunk;
组的数量是固定的还是可变的?如果我理解正确的话,是可变的。好奇的是:为什么要用这个来代替更简单的SELECT*FROM SELECT*FROM Table1 ORDER BY random GROUP BY chunk;?对于更大的数据集,它会更有效吗?他只希望每个“块”有一行。您的查询无法满足该要求。但我很感激你的随机订货idea@Declan_KGROUPBYCHUNK确保每个块只有一行。在这个上下文中允许非聚合表达式是一个SQLite扩展,这很酷。这在SQL Server中是行不通的。太棒了!非常感谢你!我永远也不会明白。
select t.chunk ,t.id, t.qcinfo, t.link from table1
inner join
(
select chunk ,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from table1
group by chunk
) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
where qcinfo <> 'Y'
select t.chunk
,t.link
from table1 t
inner join
(
select chunk
,FLOOR(min(id) + RAND() * (max(id)-min(id))) AS random_id
from table1
group by chunk
) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
select t.chunk
,t.link
from table1 t
inner join
(
select chunk
,cast(min(id)+abs(random() % (max(id)-min(id)))as int) AS random_id
from table1
group by chunk
) sq
on t.chunk = sq.chunk
and t.id = sq.random_id
select link, chunk from table group by chunk;
me1 | a
you2| d
select link, chunk from (select * from table order by random()) group by chunk;