带有order by的mysql结果与order by和limit

时间:2016-02-01 15:08:29

标签: mysql sql-order-by sql-limit

我有一个包含列id,年龄的表A.

以下两个查询会返回不同的结果,我不知道原因:

SELECT distinct a.id id FROM A a ORDER BY a.age DESC
SELECT distinct a.id id FROM A a ORDER BY a.age DESC LIMIT 10 OFFSET 0

有什么想法吗?我希望第二个查询返回第一个查询的前10个结果。

修改

我忘了说的是有相同年龄的行。所以我认为这与它有关。

2 个答案:

答案 0 :(得分:0)

我很惊讶他们的工作。在大多数数据库中,您会收到语法错误,因为a.age不在select中。我知道MySQL扩展了GROUP BY以允许使用未聚合的列。我认为它对SELECT DISTINCT有相同的推理。也就是说,年龄来自每个id的不确定行。它是如此不确定,可能会从一个查询更改为另一个查询。

以下是编写查询的两种适当方法:

SELECT distinct a.id, a.age
FROM A a
ORDER BY a.age DESC;

或:

SELECT a.id
FROM A a
ORDER BY MIN(a.age) DESC;   -- Or perhaps MAX(a.age) or AVG(a.age)

无论是否有LIMIT,这些都应该有更稳定的结果。

答案 1 :(得分:0)

找到解决方案。

我不确定为什么会这样。我正在使用mysql,并且可能在添加限制时执行查询与不使用它时不同。 无论如何,我在ORDER BY a.id中添加了。这在添加限制时保留了订单。

这就是查询的外观:

SELECT distinct a.id id FROM A a ORDER BY a.age DESC, a.id LIMIT 10 OFFSET 0