首页 > 解决方案 > 如何在postgres表中获取包含某些文本的随机行

问题描述

我对 sql 很陌生,如果有表,我正在使用 postgresqlmy_table

 id |   name
----+----------

我怎么能得到一个包含特定文本的随机行。

到目前为止,我有这个,选择一个随机行:

select * from my_table offset random() * (select count(*) from my_table) limit 5;

我将如何修改它以仅从名称类似的行中进行选择,或者有更好的方法吗?谢谢!

标签: sqlpostgresql

解决方案


您的代码不能保证返回 5 个随机行——甚至根本不返回 5 行,因为偏移量可能接近数据的末尾。如果表不是很大或者where子句的匹配项相对较少,您可以使用:

select t.*
from t
where name like ?
order by random()
limit 5;

对于较大的表,性能影响取决于与where条件匹配的行数以及是否where可以使用索引满足条件。性能取决于需要排序的行数。


推荐阅读