PostgreSQL ORDER BY Text начинается с 10 вместо 1 - PullRequest
0 голосов
/ 29 июня 2018
SELECT
    programs.name AS program,
    program_categories.name AS category
FROM programs
INNER JOIN program_categories
    ON program_category_id = program_categories.id
ORDER BY
    program_categories.name,
    programs.name

Приведенный выше код должен обеспечить следующий результат (я думаю):

Module 1:   |   foo
Module 1:   |   foo
Module 2:   |   foo
Module 3:   |   foo
Module 4:   |   foo
Module 5:   |   foo
Module 6:   |   foo
Module 7:   |   foo
Module 8:   |   foo
Module 9:   |   foo
Module 10:  |   foo
Module 11:  |   foo
Module 12:  |   foo
Module 13:  |   foo

Но вместо этого производит:

Module 10:  |   foo
Module 11:  |   foo
Module 12:  |   foo
Module 13:  |   foo
Module 1:   |   foo
Module 1:   |   foo
Module 2:   |   foo
Module 3:   |   foo
Module 4:   |   foo
Module 5:   |   foo
Module 6:   |   foo
Module 7:   |   foo
Module 8:   |   foo
Module 9:   |   foo

Не возражает ли кто-нибудь объяснить, что вызывает этот феномен, о котором я, кажется, не знаю? А также как это исправить / обойти?

1 Ответ

0 голосов
/ 29 июня 2018

Один простой метод - если начальные строки в category все одинаковые - это сначала упорядочить по длине, а затем по значению:

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