|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Нужно получить всех кастомеров, кто за прошлый год сделал более 5 заказов. Как это сделать в один SELECT, без подзапросов? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2021, 23:10 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Это задача аналогична задаче на поиск дублей. Стандартная задача для студентов, а так же на собеседованиях (приходится вспоминать, и ведь всерьёз спрашивают!). На будущее. Хорошим тоном является написание не только скрипта по созданию таблиц и других объектов, но и заполнению их тестовыми данными. Тогда куда как выше вероятность, что вам станут помогать. И да, элементарная вежливость так же помогает. Она в общем-то даже где-то как-то обязательна... К людям надо как-то обратиться. Например "уважаемые будущие коллеги". Если вам от них что-то нужно, то нужно это у них... попросить! При том явным образом. Например: "помогите пжлст". Ничего и близкого мы у вас не видим... :( Поэтому можно сказать, что я вам помогаю авансом. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 02:03 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь приходится вспоминать Кесарь И да, элементарная вежливость так же помогает. Она в общем-то даже где-то как-то обязательна... К людям надо как-то обратиться. Например "уважаемые будущие коллеги". Если вам от них что-то нужно, то нужно это у них... попросить! При том явным образом. Например: "помогите пжлст". ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 08:43 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь, За внимание спасибо, но я не случайно сказал про получение ФИО(блин, сперва написал про ФИО, а потом как-то стерлось), а не CustomerID - такую элементарщину я ам могу изобразить влет. Как мне с ФИО быть без подзапросов, подскажите? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 09:33 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin Кесарь, За внимание спасибо, но я не случайно сказал про получение ФИО, а не CustomerID - такую элементарщину я ам могу изобразить влет. Как мне с ФИО быть без подзапросов, подскажите? Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 09:39 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
HandKot, и схолпнете полных тёзок группировку по customerid нельзя убирать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 09:44 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Посетитель, Да, Вы абсолютно правы - тезки не должны мешаться и путать выборку. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:19 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin, так в чем проблема? поправить вариант, предложенный HandKot, не составляет никакого труда, надо просто вернуть CustomerId в group by хотя, требование делать без подзапросов в данном случае противоречит здравому смыслу. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:24 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin Кесарь, За внимание спасибо, но я не случайно сказал про получение ФИО(блин, сперва написал про ФИО, а потом как-то стерлось), а не CustomerID - такую элементарщину я ам могу изобразить влет. Как мне с ФИО быть без подзапросов, подскажите? Это всё элементарщина. Может вам всё таки начать учить то, что вам нужно сдавать? Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:31 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
А без ненужной группировки по FIO можно обойтись? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:39 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
alexeyvg Кесарь приходится вспоминать Ну вот как-то так случилось, что приходилось гнаться за скоростью, а having работает уже на последнем этапе, после сбора всех данных и группировок. И фактически в рабочем коде этот оператор не был использован не только мною, но и другими коллегами, вообще ни разу. Поэтому про него и не сразу вспоминаешь, когда начинают задавать вопросы для вчерашних студентов. Будущие менеджеры не просят, они дают задания! Очень похоже на то :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:40 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin А без ненужной группировки по FIO можно обойтись? Да, сделать отбор по группировке (первый мой запрос) в cte, а потом уже к ней присоединять таблицу покупателей. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:47 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь, А это (через CTE) будет эффктивнее, чем с подзапросом? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 11:56 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin Кесарь, А это (через CTE) будет эффктивнее, чем с подзапросом? А вот чтобы это узнать, надо запустить оба варианта на реальных данных и посмотреть план запроса. Как смотреть план запроса, можно ознакомится в разных видео и статьях. Например такая поисковая строка дасть вам нужное: "Сергей Олонцев Как читать план запроса в SQL Server". Короче всё в ваших руках. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 12:41 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь savin Кесарь, А это (через CTE) будет эффктивнее, чем с подзапросом? А вот чтобы это узнать, надо запустить оба варианта на реальных данных и посмотреть план запроса. Как смотреть план запроса, можно ознакомится в разных видео и статьях. Например такая поисковая строка дасть вам нужное: "Сергей Олонцев Как читать план запроса в SQL Server". Короче всё в ваших руках. Чтобы ЭТО узнать - надо читать совсем другие книжки. ЗЫ. СТЕ ничего не меняет. Это только форма записи запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 12:44 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin А без ненужной группировки по FIO можно обойтись? Посетитель HandKot, и схолпнете полных тёзок группировку по customerid нельзя убирать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 12:44 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь alexeyvgНу ладно, вспоминать count и having :-) Ну вот как-то так случилось, что приходилось гнаться за скоростью, а having работает уже на последнем этапе, после сбора всех данных и группировок. И фактически в рабочем коде этот оператор не был использован не только мною, но и другими коллегами, вообще ни разу. Поэтому про него и не сразу вспоминаешь, когда начинают задавать вопросы для вчерашних студентов.Мне тоже редко приходилось использовать, но если задача фильтровать по агрегатам, то как тут оптимизировать (если не хранить агрегаты)? Всё равно считать и фильтровать, а хэвингом это будет, или ещё как то - вопрос десятый ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 12:47 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь, вот только нет никакого оператора cte в плане запроса. у with cte as(select...) select ... from cte будет такой же план, как и у select... from(select...) as cte ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 12:47 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Посетитель Кесарь, вот только нет никакого оператора cte в плане запроса. у with cte as(select...) select ... from cte будет такой же план, как и у select... from(select...) as cte И что? Я в курсе, что такое cte. Тем не менее у двух запросов Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
планы выполнения будут разными. А вот какой эффективнее, можно будет понять лишь на реальных данных (хотя первый с cte выглядит более лёгким, но это весьма предварительный результат). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 13:21 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
Кесарь Посетитель Кесарь, вот только нет никакого оператора cte в плане запроса. у with cte as(select...) select ... from cte будет такой же план, как и у select... from(select...) as cte И что? Я в курсе, что такое cte. Тем не менее у двух запросов Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
планы выполнения будут разными. А вот какой эффективнее, можно будет понять лишь на реальных данных (хотя первый с cte выглядит более лёгким, но это весьма предварительный результат). Вопрос был про "подзапрос" vs "cte", какое отношение к нему имеет ваш второй select? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 13:25 |
|
Сделать запрос без подзапросов
|
|||
---|---|---|---|
#18+
savin А без ненужной группировки по FIO можно обойтись? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2021, 14:03 |
|
|
start [/forum/topic.php?fid=46&fpage=18&tid=1684433]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 416ms |
0 / 0 |