0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
1

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

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

Author24 — интернет-сервис помощи студентам
Даны таблицы (рис.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, возникает ошибка:
Код
Столбец "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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2021, 14:34
Ответы с готовыми решениями:

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

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

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

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

9
Эксперт MS Access
26805 / 14484 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.01.2021, 16:17 2
Можно сортировать по номеру поля, считая слева и начиная от 1:
SQL
1
ORDER BY 3
0
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 16:29  [ТС] 3
рис. со 2 по 5
Изображения
    
0
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 16:31  [ТС] 4
не работает, пишет, что номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.
0
3499 / 2083 / 742
Регистрация: 02.06.2013
Сообщений: 5,078
17.01.2021, 17:00 5
Цитата Сообщение от mobile Посмотреть сообщение
Можно сортировать по номеру поля, считая слева и начиная от 1
А наткнувшись взглядом на эту конструкцию, судорожно возвращаться к списку столбцов в select и заниматься подсчетами.
Или получить сортировку не по тому столбцу.
Цитата Сообщение от EFTA-3577 Посмотреть сообщение
так я прочел, по крайне мере тут
Если у вас MSSQL, то правильная ссылка - https://docs.microsoft.com/ru-... rver-ver15
И это не порядок выполнения, а порядок обработки инструкции select компилятором.
В order by можно использовать любой допустимый столбец или выражение, а не только из списка в select
0
Эксперт MS Access
26805 / 14484 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.01.2021, 17:47 6
Цитата Сообщение от EFTA-3577 Посмотреть сообщение
не работает, пишет, что номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.
Я написал тройку только как пример, рассчитывая, что Вы поставите правильный номер. Возможно правильный это 2.
0
0 / 0 / 0
Регистрация: 13.04.2020
Сообщений: 9
17.01.2021, 18:04  [ТС] 7
Да на самом деле дело не в номере, проблема в другом, номер это же просто альтернатива обозначения поля, насколько я знаю
0
1922 / 1158 / 422
Регистрация: 31.05.2012
Сообщений: 4,088
17.01.2021, 18:49 8
Лучший ответ Сообщение было отмечено 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  [ТС] 9
Спасибо! Единственное, вместо MAX использовал MIN, т.к. по заданию ID_GOODS под номером 126 идет тот, который был раньше по времени
0
0 / 0 / 0
Регистрация: 09.02.2021
Сообщений: 1
09.02.2021, 19:51 10
Добрый вечер!
Можете выложить код запроса полностью?
0
09.02.2021, 19:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2021, 19:51
Помогаю со студенческими работами здесь

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

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

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

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

PHP и MySQL. Сортировка ORDER BY
На главной странице есть кнопки, обрабатывающие один и тот же запрос, но с разным условием поиска ...

Сортировка поля Order by + DESC не работает
Добрый день , создал форму, добавил все что надо, вот собственно код . void __fastcall...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru