|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Специалисты SQL, помогите, пожалуйста, разобраться. Изучаю самостоятельно MS SQL. Пишу запрос, а он не работает, вернее я не понимаю, почему он не работает. Интересно получить не просто написанный запрос правильно, а что я не так понимаю и делаю, что не работает мой запрос. Сам запрос (что хочу сделать и логику пишу после запроса): SELECT b.X, b.Y FROM (SELECT a.X, a.Y FROM TAB1 A WHERE a.X = (SELECT MIN(TAB1.X) FROM TAB1))B WHERE b.Y = (SELECT MAX(а.Y) FROM А) Исходные данные: таблица ТАВ1 с двумя столбцами данных X и Y (значения в них не уникальны) Хочу вывести те значения Y, когда они максимальны после того, как выведены минимальные значения Х. Моя логика в моем запросе (привязку данных к конкретной таблицу делаю специально, чтобы показать как я понимаю): Планирую выводить, условно говоря, вторую производную (таблица В) от исходной таблицы(ТАВ1), где первой производной (Таблица А) буду находить все строки, где Х примет МИН значения Шаги описываю, как понимаю последовательность выполнения запроса. ШАГ1. Делается расчет таблицы B из которой будет высчитываться максимальный Y FROM (SELECT a.X, a.Y FROM TAB1 A WHERE a.X = (SELECT MIN(TAB1.X) FROM TAB1))B Таблица А будет результат всех значений МИН X для которых будут соответствовать какие-то значения Y из привязки в исходной таблице. Всю получившуюся таблицу для последующего называю В. На данном этапе я понимаю, что у меня в памяти есть 3 таблицы, исходная, таблица А и В на этом этапе одинаковые по своим значениям. ШАГ2. Вывожу столбцы X и Y таблицы В, где переменная Y таблицы В будет принимать МАКС значения из таблицы А Система мне выдает ошибку, что у меня неверно имя объекта А. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 20:44 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 22:11 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, Точно, со всеми патчами, к сожалению, дать версию не могу - 2012. По скриптам таблиц - это не какая-то практическая задача, это задача из курса обучения. Да и мой вопрос не в том, чтобы мне написали код, а в том, правильно ли я строю логику или я где-то неверно понимаю саму теорию. Задача, как мне кажется, очень легкая, т.е. решить с небольшим массивом данных в том же Excel времени надо меньше минуты, но вот почему не ложится в ответ, не понимаю. Сервер, который анализирует решение, точно наблюдается и задача точно решается, там ошибка - минимальная возможная вероятность. Мне кажется, что я что-то неверно понимаю при переименовании таблиц и откуда я тяну данные для расчета. Потому что если я в последней строке WHERE b.Y = (SELECT MAX(а.Y) FROM А) заменю на WHERE b.Y = "введу конкретное значение, которое получу в том же эксель", то ответ на выходе такой, как должен быть. Тут вопрос больше теоретического понимания ... Заранее всем спасибо, кто сможет что-то подсказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 23:28 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Попробовал у себя на Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) та же самая ошибка :( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2020, 23:48 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Решил попробовать в последней строке "WHERE b.Y = (SELECT MAX(а.Y) FROM А)" вместо "FROM A" попробовать сослаться не на таблицу А, а еще раз прописать получение данных, т.е. по сути повторить строку "FROM (SELECT a.X, a.Y FROM TAB1 A WHERE a.X = (SELECT MIN(TAB1.X) FROM TAB1))B". Как итог, получается вот такой вот РАБОЧИЙ запрос: SELECT X, Y FROM (SELECT X, Y FROM TAB1 WHERE X = (SELECT MIN(X) FROM TAB1))B WHERE Y = (SELECT MAX(Y) FROM (SELECT X,Y FROM TAB1 WHERE X = (SELECT MIN(X) FROM TAB1))C) Отсюда уточняющие вопросы: 1. Почему я не могу просто сослаться на созданную таблицу B, а вынужден сделать тоже самое действие и создать еще одну таблицу С? 2. Посоветуйте, что почитать для углубления именно в этот теоретический аспект, я так понимаю, что тут какая-то особенность с объектами, которые я создаю и на которые я ссылаюсь? Спасибо, кто сможет откликнуться и найти время на такую достаточно простую задачу для ГУРУ SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 00:11 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Удивительно, как много может человек нести ненужной оправдательной чуши вместо того, чтобы написать все, что его просят -- исходные данные, конечные данные и описание алгоритма, по которому необходимо получить второе из первого. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 00:15 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
MVY Решил попробовать в последней строке "WHERE b.Y = (SELECT MAX(а.Y) FROM А)" вместо "FROM A" попробовать сослаться не на таблицу А, а еще раз прописать получение данных, т.е. по сути повторить строку "FROM (SELECT a.X, a.Y FROM TAB1 A WHERE a.X = (SELECT MIN(TAB1.X) FROM TAB1))B". Как итог, получается вот такой вот РАБОЧИЙ запрос: SELECT X, Y FROM (SELECT X, Y FROM TAB1 WHERE X = (SELECT MIN(X) FROM TAB1))B WHERE Y = (SELECT MAX(Y) FROM (SELECT X,Y FROM TAB1 WHERE X = (SELECT MIN(X) FROM TAB1))C) Отсюда уточняющие вопросы: 1. Почему я не могу просто сослаться на созданную таблицу B, а вынужден сделать тоже самое действие и создать еще одну таблицу С? 2. Посоветуйте, что почитать для углубления именно в этот теоретический аспект, я так понимаю, что тут какая-то особенность с объектами, которые я создаю и на которые я ссылаюсь? Спасибо, кто сможет откликнуться и найти время на такую достаточно простую задачу для ГУРУ SQL. 1. Потому что никакую таблицу B вы не создавали, даже если вам кажется обратное. 2. Базовый синтаксис команд с примерами. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 00:19 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Удивительно, как много может человек нести ненужной оправдательной чуши вместо того, чтобы написать все, что его просят -- исходные данные, конечные данные и описание алгоритма, по которому необходимо получить второе из первого. Я, конечно, извиняюсь, но просто взять и сделать за кого-то многие вещи, я сам могу. Но вопрос был не в том, чтобы за меня сделали и сказали - пользуйся, а в том, чтобы обратили внимание на определенный аспект теории и возможно подсказали правильный вектор рассмотрения. Как по мне, вопрос задан был корректно и суть вопроса - понимание теории и были даны как исходные данные, так и описание алгоритма, по которому необходимо получить второе из первого. Не вижу нигде оправданий. А назвать размышления новичка в теме "чушью" можно рассматривать как неумением или нежеланием научить чему-то... что-то из серии "вы дайте мне автомобиль и я вам покажу как его водить, а вот объяснить почему он вообще едет - это типа для слабаков и лузеров. Не бывает плохих учеников, которые не знают предмет, бывают бездарные учителя, которые не могут в своем предмете заинтересовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 00:34 |
|
Подскажите, что неверно я делаю в запросе (уровень - новичок)
|
|||
---|---|---|---|
#18+
Модератор: Вашим преподам в универе будете рассказывать, какие они бездари, что вы их предмет на 2 знаете. А тут ни университетом, ни классическим учительством даже и не пахнет. Ваше поведение -- это примерно как продавцам в супермаркете рассказывать, что они не могут вас научить выбирать вино или макароны, не заинтересовали они, видите ли, вас. А оно им вообще надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2020, 00:39 |
|
|
start [/forum/topic.php?fid=46&msg=39960513&tid=1686087]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 304ms |
total: | 454ms |
0 / 0 |