ORDER BY на разных столбцах в разных направлениях в SQLite - PullRequest
8 голосов
/ 24 августа 2009

У меня есть таблица, определяемая как:

    CREATE TABLE bar_table (
        _id INTEGER NOT NULL PRIMARY KEY,
        index INTEGER NOT NULL DEFAULT '65535',
        _date DATE
    )

Мое основное утверждение выбора:

SELECT * FROM bar_table ORDER BY <your-clause-here>

Как мне упорядочить выборку по возрастанию индекса и по убыванию даты? то есть маленькие индексы предшествуют большим индексам. Если два индекса совпадают, более поздняя дата должна быть на первом месте.

Документация указывает мне на COLLATion, но я не совсем уверен, что это такое.

1 Ответ

21 голосов
/ 24 августа 2009

Хотя я знаю, что у вас уже есть свой ответ, я думаю, что здесь уместно вдаваться в подробности на работе.

Во-первых, предложение order by идет в порядке указанных столбцов или выражений. В этом случае:

order by index asc, _date desc

Сортирует по index от наименьшего к наибольшему (asc окончание), а затем _date от наибольшего к наименьшему (desc окончание). Хотя asc является значением по умолчанию, я обычно включаю его, когда несколько столбцов идут в противоположных направлениях, как вы делаете здесь.

Вы также можете включить выражения в order by:

order by case when index < 0 then 1 else 0 end desc, _date desc

Это поместит все отрицательные строки index в верхнюю часть, а затем отсортирует их по _date. Использование выражений в предложении order by очень эффективно при определенных обстоятельствах.

Итак, вы упомянули сопоставление и небольшую путаницу относительно того, что это такое. Сличение - это то, как база данных обрабатывает капитал и акценты при сравнении строк. С сопоставлением Captial-Sensitive, 'abc' != 'ABC'. Однако при сопоставлении с нечувствительностью к капиталу 'abc' = 'ABC'.

Следует отметить, что параметры сортировки не набор символов. Обычно это определяется типом данных (varchar == ASCII, nvarchar == Юникод). Сортировка определяет, как сравниваются строки, а не какие наборы символов доступны для использования.

Кроме того, сопоставление также важно для определенных языков. Учитывая латинское сопоставление, вам просто нужно беспокоиться о заглавных буквах и акцентах, но с учетом датского сопоставления 'aa' = 'å'. 1 Итак, вы можете видеть, что сопоставление играет большую роль в определении сортировки и сравнения для разных языков , также.

Сортировка очень важна при упорядочении, поскольку она определяет порядок упорядочения строк при разных значениях заглавных букв и ударений. Вот почему он продолжает появляться в ваших поисках. Сличение важно, и это даже повлияло на StackOverflow на этой неделе!

1 : Спасибо Майклу Мэдсену за указание на этот конкретный пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...