DISTINCT是否总是为同一个SQL返回相同的值顺序?

时间:2016-08-29 01:48:07

标签: mysql sql distinct

我有一个带有模式的

的sql语句
SELECT id FROM table WHERE [conditions] ORDER BY [orders] LIMIT 10000 OFFSET 0

,返回值如下:

id
-----
1
0
0
0
0
1
1
1
2
2
...

然后我想得到它们第一次出现的顺序的明显值,因为在sql中有ORDER BY,而DISTINCT或GROUP BY都发生在sql中的ORDER BY之前,我在下面尝试过SQL。

SELECT DISTINCT id FROM (SELECT id FROM table WHERE [conditions] ORDER BY [orders] LIMIT 10000 OFFSET 0) tmp;

结果就像我想要的那样:

id
----
1
0
2
...

我的问题是:我可以确保在相同的模式SQL中,DISTINCT将始终返回不同的id作为它们首次出现的顺序吗?

感谢。

---------------注释------------------

以下可以忽略。我刚刚注意到很多人都推荐尝试GROUP BY,所以我也试过下面的sql:

SELECT id FROM (SELECT id FROM table WHERE [conditions] ORDER BY [orders] LIMIT 10000 OFFSET 0) tmp GROUP BY id;

但返回是由alpha-beta顺序重新排序的(它不是整数顺序,因为该列是真实id的CHAR列是一个字符串),这不是我想要的。

id
----
0
1
10
100
....

1 个答案:

答案 0 :(得分:2)

如果您希望结果按特定顺序排列,则需要在ORDER BY中为最外层SELECT指定。这表明这样的事情:

SELECT id
FROM tabl
WHERE [conditions]
ORDER BY [orders]
LIMIT 10000 OFFSET 0

然后,如果您想通过第一次出现进行排序,则需要一个指定第一个外观的列。我们称之为CreatedAt(也许是orders?)。如果是这样的话:

SELECT id
FROM table
WHERE conditions
GROUP BY id
ORDER BY min(CreatedAt)
LIMIT 10000;

注意:SQL表代表无序集,因此您需要一个列来指定感兴趣的顺序。