Mysql “如何”;“订购”;如果有相同的值,是否排序?
假设有一张桌子:Mysql “如何”;“订购”;如果有相同的值,是否排序?,mysql,sql,sql-order-by,myisam,Mysql,Sql,Sql Order By,Myisam,假设有一张桌子: name | score A 100 B 98 C 99 D 99 E 99 F 98 和请求sql='select*from table order by score desc' 我知道顺序是100,99,99,99,98,98,但99和98中有几个值 我正在使用MyIsam,希望确保99和98中的顺序不会改变,即使我删除了一些元素。 例如,如果订单是C->D->E,我删除了D,那么我希望是C->E,但没有E->C
name | score
A 100
B 98
C 99
D 99
E 99
F 98
和请求sql='select*from table order by score desc'
我知道顺序是100,99,99,99,98,98,但99和98中有几个值
我正在使用MyIsam,希望确保99和98中的顺序不会改变,即使我删除了一些元素。
例如,如果订单是C->D->E,我删除了D,那么我希望是C->E,但没有E->C。
当有相同的顺序值时,它是否有任何逻辑工作?SQLite以未指定的顺序存储表中的行。这意味着表中的行可能按插入顺序排列,也可能不按插入顺序排列 如果使用SELECT语句从表中查询数据,则结果集中的行顺序未指定。要对结果集进行排序,请在SELECT语句中添加ORDER BY子句,如下所示:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
我希望这能对你有所帮助
SELECT * FROM table ORDER BY score DESC
以上查询仅按分数排序数据。
如果您想按前面提到的另一个字段对数据进行排序,您可以将该字段也添加到查询中,如下所示。你提到你想按加入顺序(C>D>E)按姓名订购。所以我用ASC的订单。下面的查询将提供您请求的输出
SELECT * FROM table ORDER BY score DESC,name ASC
SQL表表示无序集。因此,当orderby
键具有相同的值时,没有“默认”排序
从技术上讲,这意味着SQL中的排序是不稳定的。解决方法是添加一个或多个附加键,使每个组合都是唯一的
对于示例数据,可以使用name
:
order by score desc, name
您还可以使用唯一标识每行的任何其他列(如果可用)。这些键在
分数之后
无法保证具有相等值的行是如何排序的;正如如果查询中没有ORDER BY,则无法保证行的顺序。唯一的保证方法是使用第二级排序,例如,ORDER BY score DESC,name ASC
您可以使用主键列按列进行第二级排序,以确保即使在删除行D
时也能按顺序排序。例如:在您的表中,如果主键中有name列,那么您的select查询将是select*from table order by score desc,name asc
。该问题没有SQLite标记。