Несколько вторичных сортировок на основе первой сортировки - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть таблица с несколькими столбцами.Я отсортировал столбец «номер» по порядку.Несмотря на то, что происходит сложнее, я бы хотел отсортировать столбцы «Письмо» и «Идентификатор» как вторичную сортировку на основе первого столбца.Столбец «name» просто следует за столбцом «id» без сортировки.

Я пробовал несколько разных запросов, включая ORDER BY number, letter, id, но это, очевидно, сортирует столбец 'id' относительно столбца 'Letter', а это не то, что я хотел.Я также искал другие предложения SQL, которые могли бы помочь мне в сортировке двух независимых столбцов, но до сих пор в большинстве ответов используется ключевое слово ORDER BY.

Окончательный результат должен выглядеть следующим образом:

Перед сортировкой

Before Sorting

Желаемый результат

After Sorting

И «Письмо», и «Идентификатор» сортируются независимо в качестве вторичной сортировки относительно первого («числа») столбца, а «имя» просто следует застолбец id.

Редактировать:

Некоторые могут сказать, что ORDER BY number, letter, id работает, но на самом деле каждый столбец сортируется на основе предыдущих отсортированных столбцов, а не первого столбца.Это результат, если используется команда.

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы пытаетесь упорядочить значения в столбцах , а не в строках .Это странно, но может быть сделано в SQL.Идея состоит в том, чтобы перечислять по упорядоченным значениям в каждом столбце, а затем соединять их вместе:

select tn.number, tn.letter, ti.id, ti.name
from (select t.*, (@rnl := @rnl + 1) as rn
      from (select t.* from t order by t.number, t.letter
           ) t cross join
           (select @rnl := 0) params
     ) tn join
     (select t.*, (@rni := @rni + 1) as rn
      from (select t.* from t order by t.number, t.id
           ) t cross join
           (select @rni := 0) params
     ) ti
     on tn.rn = ti.rn
order by tn.rn;

Мы можем перечислить по всей таблице (т.е. не принимая во внимание number).Сначала подзапросы упорядочиваются по number, поэтому значения rn для данного number всегда будут в одном и том же диапазоне.

0 голосов
/ 26 декабря 2018

Вы можете сделать:

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