Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в реализации WITH внутри другого WITH / 3 сообщений из 3, страница 1 из 1
11.06.2021, 20:53
    #40077297
sysn1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в реализации WITH внутри другого WITH
Решаю задачки из онлайн учебника (www.sql-ex.ru).
Нахожусь на 24 задание (https://www.sql-ex.ru/learn_exercises.php#answer_ref).
С помощью данного запроса я вывел все максимумы по каждому Типу техники (ноут, комп, принтер):
Код: 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.
27.
WITH pk (model, price) as (
SELECT model, price
FROM PC
WHERE price = (SELECT MAX(price)
FROM pc)
),
l (model, price) as (
SELECT model, price
FROM laptop
WHERE price = (SELECT MAX(price)
FROM laptop)
),
pr (model, price) as (
SELECT model, price
FROM printer
WHERE price = (SELECT MAX(price)
FROM printer)
)
SELECT *
FROM pk
UNION ALL
SELECT *
FROM l
UNION ALL
SELECT *
FROM pr
---



Остается логичным, что из этого общака можно вытянуть максимум таким запросом:
Код: sql
1.
2.
3.
4.
5.
SELECT price, model
FROM *сделанный WITH*
WHERE price = (MAX(price)
FROM *сделанный WITH*
)



Проблема заключается в том, что я не могу понять как засунуть *сделанный WITH* в новый WITH?

Проблема решается INSERT-ом нынешних данных в новую таблицу (можно в временную) и уже там вставлять последний скрипт на максимум. Но есть ли решение в один скрипт?

PS. Возможно задача решается в меньшее количество строк, но приятнее когда сам решил (если даже систему загрузил на максимум)
...
Рейтинг: 0 / 0
11.06.2021, 21:05
    #40077299
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в реализации WITH внутри другого WITH
sysn1k,

Код: 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.
27.
28.
29.
30.
31.
32.
33.
WITH pk (model, price) as (
SELECT model, price
FROM PC
WHERE price = (SELECT MAX(price)
FROM pc)
),
l (model, price) as (
SELECT model, price
FROM laptop
WHERE price = (SELECT MAX(price)
FROM laptop)
),
pr (model, price) as (
SELECT model, price
FROM printer
WHERE price = (SELECT MAX(price)
FROM printer)
),
result as
(
SELECT *
FROM pk
UNION ALL
SELECT *
FROM l
UNION ALL
SELECT *
FROM pr
)
SELECT price, model
FROM result  --*сделанный WITH*
WHERE price = (MAX(price)
FROM result --*сделанный WITH*
...
Рейтинг: 0 / 0
12.06.2021, 18:33
    #40077356
sysn1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь в реализации WITH внутри другого WITH
Владислав Колосов,

Спасибо большое. Не знаю почему SELECT с UNION мозг не давал поместить в CTE. Казалось, что так не сработает.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в реализации WITH внутри другого WITH / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]