0

我想在某些条件下获取前 1000 个非空结果的列的最大值。然后,下一个 1000 的时间,以此类推。我在不同的条件下这样做,但是当我使用 dayofweek 时,我发现了一些奇怪的东西。我向您展示的第一个命令有效:

mysql> select max(id),max(d20) from (select id, d20 from data where d20 is not null and id<1000000 and dayofweek(day)=1 limit 1000) x;
+---------+----------+
| max(id) | max(d20) |
+---------+----------+
|  100281 |    13785 |
+---------+----------+
1 row in set (0.44 sec)

但实际上我想要第二个命令,它不能按预期工作。

mysql> select max(id),max(d20) from (select id, d20 from data where d20 is not null and id>100000 and dayofweek(day)=1 limit 1000) x;
+---------+----------+
| max(id) | max(d20) |
+---------+----------+
|  303765 |        0 |
+---------+----------+
1 row in set (0.02 sec)

有什么线索吗?

4

1 回答 1

1

取极限为 1 的极端情况。

这意味着,子查询返回任何 id<1000000 的行(没有 order by 使行确定),这使得 MAX(id) 和 MAX(d20) 仅返回该行的值。几乎不能代表整个收藏。

将限制提高到 1000 只会使样本变大,但仍会给出不确定的结果,具体取决于采样的 1000 行(假设有超过 1000 行匹配)。每次执行查询时,您很可能会得到不同的结果,因此期望特定结果是行不通的。

如果您需要确定性结果,ORDER BY请在限制结果之前向子查询添加一个。

于 2013-07-30T10:43:41.990 回答