Как заказать "ORDER BY", если есть одинаковые значения? - PullRequest
1 голос
/ 19 февраля 2020

Допустим, есть таблица:

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

и запрос sql = 'выберите * из таблицы порядка по счету des c'

Я знаю, что порядок будет 100, 99 , 99, 99, 98, 98, но есть несколько значений в 99 и 98.

Я использую MyIsam и хочу убедиться, что порядок в 99 и 98 не изменился, даже если я удаляю какой-то элемент , Например, если порядок был C -> D-> E, и я удаляю D, то я ожидаю, что будет C -> E, но не E -> C. Есть ли лог c, работает ли он при одинаковом значении заказа?

Ответы [ 3 ]

1 голос
/ 19 февраля 2020
SELECT * FROM table ORDER BY score DESC 

Над запросом упорядочение данных только по счету. Если вы хотите упорядочить данные по другому полю, как вы упомянули, добавьте это поле также в запрос, как показано ниже. У вас есть упоминания, что вы хотите заказать по имени в присоединяющемся порядке (C> D> E). Поэтому я использовал ORDER BY AS C. Приведенный ниже запрос даст вам запрошенный вывод.

SELECT * FROM table ORDER BY score DESC,name ASC
1 голос
/ 19 февраля 2020

SQL таблицы представляют неупорядоченные наборы. Таким образом, не существует порядка «по умолчанию», когда order by ключи имеют одинаковое значение.

Технически это означает, что сортировка в SQL является нестабильной . Исправление заключается в добавлении одной или нескольких дополнительных клавиш, чтобы каждая комбинация была уникальной.

Для ваших примеров данных это, предположительно, может быть обработано с помощью name:

order by score desc, name

Вы также можете использовать любой другой столбец (столбцы), если он доступен, который однозначно идентифицирует каждую строку. Эти клавиши go после score.

0 голосов
/ 19 февраля 2020

SQLite сохраняет строки в таблице в неопределенном порядке. Это означает, что строки в таблице могут быть или не быть в том порядке, в котором они были вставлены.

Если вы используете инструкцию SELECT для запроса данных из таблицы, порядок строк в наборе результатов не указан , Чтобы отсортировать набор результатов, добавьте предложение ORDER BY в оператор SELECT следующим образом:

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

Надеюсь, эта ссылка может вам помочь.

...