Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9

Сортировка ORDER BY

17.01.2021, 14:34. Показов 3285. Ответов 9

Студворк — интернет-сервис помощи студентам
Даны таблицы (рис.1), из них необходимо получить результат (рис.2).
Мой запрос 1 (результат рис.3):
T-SQL
1
2
3
4
SELECT DISTINCT cocp.GENDAR, cobg.ID_GOODS
 FROM Characteristics_of_clients_parameter AS cocp JOIN Characteristics_of_buying_goods AS cobg 
                                                                             ON cocp.ID_CLIENT = cobg.ID_CLIENT
WHERE cocp.GENDAR = 'F'
Запрос возвращает неверный вариант решения, так-как нас просят представить ответ, где присутствует сортировка по времени (поле TIME в 1 таблице).

Запрос 2 (рис.4):
T-SQL
1
2
3
4
5
SELECT cocp.GENDAR, cobg.ID_GOODS
 FROM Characteristics_of_clients_parameter AS cocp JOIN Characteristics_of_buying_goods AS cobg 
                                                                             ON cocp.ID_CLIENT = cobg.ID_CLIENT
WHERE cocp.GENDAR = 'F'
ORDER BY cobg.TIME
Также возвращает неверное решение, т.к. содержит дублирующую пару.
Добавляю группировку GROUP BY cocp.GENDAR, cobg.ID_GOODS, возникает ошибка:
Code
1
Столбец "Characteristics_of_buying_goods.TIME" недопустим в предложении ORDER BY, так как он не содержится в агрегатной функции или предложении GROUP BY.
Как я понял, порядок выполнения SQL запроса следующий:
1.FROM(JOIN) - формируется объединенная таблица на основании совпадения ID_CLIENT в обеих таблицах
2.WHERE - отфильтровываем данные, где GENDAR = 'F'
3.GROUP BY - выполняется группировка по двум полям, указанным в SELECT, и на данном этапе выполняется автоматическая сортировка, которая упорядочивает данные по возрастанию ID_GOODS
4.SELECT
5. ORDER BY - и, вот тут вопрос. По идее (так я прочел, по крайне мере тут), ORDER работает с данными, которые мы сформировали в запросе SELECT, т.е на момент его выполнения мы не можем обратиться к полям, не относящимся к тем, что указаны в SELECT, НО! Если не использовать GROUP BY, то результат (рис.5). Т.е. без группировки ORDER BY может обращаться к данным, которых нет в сформированном наборе данных SELECT?
Буду благодарен за объяснение данной ситуации и пути решения моей проблемы.
Миниатюры
Сортировка ORDER BY  
Изображения
    
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.01.2021, 14:34
Ответы с готовыми решениями:

Не работает сортировка ORDER BY
Не сортирует конструкция order by языка MYSQL. Вот какой запрос пишу: select * from pig order by surname Вот банальная...

Не работает сортировка по ORDER BY
Всем доброго времени, суток, мне нужно сделать, чтобы данные из таблицы БД выводились в обратном порядке, вот SQL запрос ...

ORDER BY - сортировка с учётом чисел
Добрый день. Необходимо отсортировать записи, хранящие числа в формате X.Y.Z. Эти значения записаны как строки, например, 1.3.10. ...

9
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.01.2021, 16:17
Можно сортировать по номеру поля, считая слева и начиная от 1:
SQL
1
ORDER BY 3
0
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 16:29  [ТС]
рис. со 2 по 5
Изображения
    
0
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 16:31  [ТС]
не работает, пишет, что номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
17.01.2021, 17:00
Цитата Сообщение от mobile Посмотреть сообщение
Можно сортировать по номеру поля, считая слева и начиная от 1
А наткнувшись взглядом на эту конструкцию, судорожно возвращаться к списку столбцов в select и заниматься подсчетами.
Или получить сортировку не по тому столбцу.
Цитата Сообщение от EFTA-3577 Посмотреть сообщение
так я прочел, по крайне мере тут
Если у вас MSSQL, то правильная ссылка - https://docs.microsoft.com/ru-... rver-ver15
И это не порядок выполнения, а порядок обработки инструкции select компилятором.
В order by можно использовать любой допустимый столбец или выражение, а не только из списка в select
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.01.2021, 17:47
Цитата Сообщение от EFTA-3577 Посмотреть сообщение
не работает, пишет, что номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.
Я написал тройку только как пример, рассчитывая, что Вы поставите правильный номер. Возможно правильный это 2.
0
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 18:04  [ТС]
Да на самом деле дело не в номере, проблема в другом, номер это же просто альтернатива обозначения поля, насколько я знаю
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.01.2021, 18:49
Лучший ответ Сообщение было отмечено EFTA-3577 как решение

Решение

соединяй Characteristics_of_clients_parameter c подзапросом, в котором уже сгруппированы данные, например таким:
SQL
1
2
3
SELECT ID_CLIENT,ID_GOODS,MAX(TIME) AS TIME
  FROM Characteristics_of_buying_goods
  GROUP BY ID_CLIENT,ID_GOODS
без группировки и сортируй по времени
1
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 18:54  [ТС]
Спасибо! Единственное, вместо MAX использовал MIN, т.к. по заданию ID_GOODS под номером 126 идет тот, который был раньше по времени
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 1
09.02.2021, 19:51
Добрый вечер!
Можете выложить код запроса полностью?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2021, 19:51
Помогаю со студенческими работами здесь

ORDER BY, сортировка по отрицательным значениям
Здравствуйте, подскажите пожалуйста, есть запрос: SELECT * FROM user ORDER BY test ASC LIMIT 10 в столбце test значения -20 5 ...

HSQL запрос. Что не так? "from hiberdata.Order order where order.clientId=?"
public List loadOrdersByClientId(Integer clientId) { return getHibernateTemplate().find( 'from hiberdata.Order order where...

двойная сортировка в ORDER BY
Есть SQL-запрос к базе на выборку по двум полям, в первом выбирается несколько конкретных записей и делается сортировка по убыванию, во 2-м...

Сортировка ORDER BY+EDIT
Имеется таблица с 2 столбцами. Нужно отсортировать один столбец по алфавиту и заменить нумерацию 2-го столбца по возрастанию, сохранить...

ORDER BY и сортировка. Проблемы.
Есть SQL-запрос типа: SELECT TableMain.Field1, TableMain.Field2 & ' ' & TableMain.Field3 as Title, TableSecond.Field1, TableSecond. FROM...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru