Упорядочить только по одному из двух отдельных столбцов - PullRequest
0 голосов
/ 04 марта 2019

Я выбираю ColA и ColB в одном выражении:

select distinct ColA, ColB, EDITABLE from TableA;

Я хотел бы использовать ORDER BY lower(ColA), потому что я хотел бы сортировать ColA по алфавиту, без учета заглавных букв.ColB не должен влиять на эту сортировку, и я хотел бы только сортировать ColA (который должен различаться, потому что в ColA есть много экземпляров одного и того же значения).

Я пытался

select distinct ColA, ColB, EDITABLE
from TableA
ORDER BY lower(ColA)

и также видел этот вопрос, касающийся отличных и упорядоченных по , но когда я попытался

select distinct ColA, ColB, lower(ColA), EDITABLE
from TableA
GROUP BY ColA
ORDER BY lower(ColA) ASC, ColA

, я не смог выполнить приведенное выше утверждение.Я очень новичок в SQL и хотел бы получить несколько советов о том, почему это не сработало, и помочь мне улучшить это утверждение для

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Ваш указанный вопрос не относится к вашему вопросу.В этом вопросе есть другой столбец , используемый для заказа, один не в оригинальном select distinct.В вашем случае order by использует функцию в одном из исходных столбцов.Не должно быть необходимости повторять выражение в SELECT.

. Вы также можете использовать group by:

select ColA, ColB, EDITABLE
from TableA
group by ColA, ColB, EDITABLE
order by lower(ColA);
0 голосов
/ 04 марта 2019

Это ваш запрос:

select distinct ColA, ColB, lower(ColA), EDITABLE
from TableA
GROUP BY ColA
ORDER BY lower(ColA) ASC, ColA

И вот что он делает:

1.   FROM clause: select rows from TableA.
2.   GROUP BY clause: Aggregate rows so as to get one row per ColA.
3.   SELECT clause:
3.1.   Show ColA. This is okay, ColA is what you group by.
3.2.   Show ColB. Which? There can be diferent ColB per ColA. This produces an error.
3.3.   Show lower(ColA). That is okay. You group by ColA, so lower(ColA) is also known.
3.4.   Show EDITABLE. Again: which? There can be diferent EDITABLE per ColA.
3.5.   DISTINCT: remove duplicate rows. This is superfluous, because there cannot be
       duplicate rows. They all have different ColA.
4.   ORDER BY clause:
4.1.   Sort by lower(ColA), so you have 'John' and 'john' together.
4.2.   Sort by ColA. This tells the DBMS whther to put 'John' or 'john' first.

Надеюсь, это объясняет, как выполняется запрос, что делает GROUP BY и чторазрешено в предложении SELECT.DISTINCT очень часто является признаком плохо написанного запроса.Здесь это просто лишнее, но довольно часто оно используется как защита от плохих объединений, приводящих к дублирующимся строкам.Всякий раз, когда вы видите SELECT DISTINCT, спрашивайте себя, что делает это необходимым.

0 голосов
/ 04 марта 2019

Упомяните все столбцы в Group By, которые вы Select ing

В SQLServer это похоже на:

select distinct ColA, ColB, lower(ColA)
from TableA
GROUP BY ColA, ColB, lower(ColA)
ORDER BY lower(ColA) ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...