mysql 如果它们是相同的值,“ORDER BY”如何排序?

mefy6pfw  于 2023-02-07  发布在  Mysql
关注(0)|答案(3)|浏览(716)

假设有一张table:

name | score
A      100
B      98
C      99
D      99
E      99
F      98

并请求sql = 'select * 从表中按分数说明排序'
我知道顺序是100,99,99,99,98,98但是99和98有几个值.
我正在使用MyIsam,希望确保即使删除了一些元素,99和98中的顺序也不会改变。例如,如果顺序是C-〉D-〉E,而我删除了D,那么我希望是C-〉E,但没有E-〉C。当有相同的顺序值时,是否有任何逻辑可以工作?

c2e8gylq

c2e8gylq1#

SELECT * FROM table ORDER BY score DESC

上面的查询只按分数排序数据。如果你想按你提到的另一个字段排序数据,你也可以把那个字段添加到下面的查询中。你提到你想按名字排序(C〉D〉E)。所以我使用ORDER BY ASC。下面的查询会给予你你请求的输出。

SELECT * FROM table ORDER BY score DESC,name ASC
hgtggwj0

hgtggwj02#

SQL表表示“无序”集合,因此,当order by键具有相同的值时,不存在“默认”排序。
从技术上讲,这意味着SQL中的排序是 * 不稳定的 *。修复方法是添加一个或多个额外的键,以便每个组合都是唯一的。
对于您的示例数据,这大概可以使用name来处理:

order by score desc, name

您还可以使用任何其他列(如果有)来唯一标识每行。这些键位于score * 之后 *。

idfiyjo8

idfiyjo83#

SQLite以未指定的顺序存储表中的行。这意味着表中的行可能按照也可能不按照它们插入的顺序。
如果使用SELECT语句查询表中的数据,则未指定结果集中的行顺序。要对结果集进行排序,请在SELECT语句中添加ORDER BY子句,如下所示:

SELECT
   select_list
FROM
   table
ORDER BY
    column_1 ASC,
    column_2 DESC;

我希望这个link可以帮助你。

相关问题