SQL - 如何选择随机行,直到该行的总值为某个数字?

Posted

技术标签:

【中文标题】SQL - 如何选择随机行,直到该行的总值为某个数字?【英文标题】:SQL - How to select random rows until the total value of the row is a certain number? 【发布时间】:2020-02-20 15:13:50 【问题描述】:

我目前有一个表,其中有一列将时间保存为整数值。如何以随机顺序选择表中的所有行,直到时间的总值 = 某个数字,例如 10。

【问题讨论】:

更新了标签以包含 mysql。对此感到抱歉 【参考方案1】:

这样的东西适用于 SQL Server:

select id, timeValue from (
    select  id,
            timeValue,
            SUM(timeValue) OVER (ORDER BY CHECKSUM(NewId())) as total
    from    myTable) as subq
where   total < 10

【讨论】:

【参考方案2】:

在 MySQL 中,您将对满足或超过 10 的第一行使用以下内容:

select id, timeValue from (
from (select t.*
             sum(timeValue) over (order by rand()) as running_sum
      from t
     ) t
where (running_sum - timeValue) < 10;

如果您希望行数不超过但不超过 10,那么:

where running_sum <= 10

【讨论】:

以上是关于SQL - 如何选择随机行,直到该行的总值为某个数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL 数据库表中选择随机行? [复制]

使用 sql (Hive) 中的条件为每个 ID 选择随机行

从Hive表中选择每列的随机行数

从巨大的 CSV 文件中读取随机行

sql 从sqlite表中选择随机行

sql 从PostgreSQL中选择随机行