sql - 如何在postgres表中获取包含某些文本的随机行
问题描述
我对 sql 很陌生,如果有表,我正在使用 postgresqlmy_table
id | name
----+----------
我怎么能得到一个包含特定文本的随机行。
到目前为止,我有这个,选择一个随机行:
select * from my_table offset random() * (select count(*) from my_table) limit 5;
我将如何修改它以仅从名称类似的行中进行选择,或者有更好的方法吗?谢谢!
解决方案
您的代码不能保证返回 5 个随机行——甚至根本不返回 5 行,因为偏移量可能接近数据的末尾。如果表不是很大或者where
子句的匹配项相对较少,您可以使用:
select t.*
from t
where name like ?
order by random()
limit 5;
对于较大的表,性能影响取决于与where
条件匹配的行数以及是否where
可以使用索引满足条件。性能取决于需要排序的行数。
推荐阅读
- java - 休眠升级期间的mappedby和JoinColumn问题
- jenkins - Jenkins master 需要很长时间才能从 slave 节点收集结果
- flutter - DateFormat 在颤动中显示工作日的错误输出
- api - Lua - 请求通过 curl 工作,但不是通过 Lua(Lua 套接字)?
- javascript - 错误:生成 ENAMETOOLONG ,字符串太长
- python - 使用 Python 将所有列表元素覆盖为字符串?
- php - Laravel 更新 hasMany 关系中的记录
- android - Admob 自适应横幅广告实施
- rust - 你如何更新 rust 的 tonic 服务
- java - 更新 JsonNode 中每个项目的值 (jackson)