с
Упорядоченные
строки составляют группы: первая группа начинается с первой строки,
каждая строка со значением color='n' начинает новую группу, группы строк
не перекрываются.
Для
каждой группы определить: наибольшее значение поля model (max_model),
количество уникальных типов принтеров (distinct_types_cou) и среднюю
цену (avg_price).
Для всех строк таблицы вывести: code, model, color, type, price, max_model, distinct_types_cou, avg_price.
SELECT code, model, color, type, price,
MAX(model)OVER(PARTITION BY Grp)max_model,
MAX(CASE type WHEN'Laser'THEN 1 ELSE 0 END)OVER(PARTITION BY Grp)+
MAX(CASE type WHEN'Matrix'THEN 1 ELSE 0 END)OVER(PARTITION BY Grp)+
MAX(CASE type WHEN'Jet'THEN 1 ELSE 0 END)OVER(PARTITION BY Grp)distinct_types,
AVG(price)OVER(PARTITION BY Grp)
FROM(
SELECT *,
CASE color WHEN'n'THEN 0 ELSE ROW_NUMBER()OVER(ORDER BY code)END+
CASE color WHEN'n'THEN 1 ELSE-1 END*ROW_NUMBER()OVER(PARTITION BY color ORDER BY code)Grp
FROM Printer
)T
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html

Определить имена разных пассажиров, которые летали
только между двумя городами (туда и/или обратно).
select name from passenger
where id_psg in
(
select id_psg from trip t,pass_in_trip pit
where t.trip_no=pit.trip_no
group by id_psg
having count(distinct case when town_from<=town_to then town_from+town_to else town_to+town_from end)=1
)
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html

Выбрать
три наименьших и три наибольших номера рейса. Вывести их в шести
столбцах одной строки, расположив в порядке от наименьшего к
наибольшему.
Замечание: считать, что таблица Trip содержит не менее шести строк.
Select min(t.trip_no),min(tt.trip_no),min(ttt.trip_no),max(t.trip_no),max(tt.trip_no),max(ttt.trip_no)
from trip t, trip tt, trip ttt
where tt.trip_no > t.trip_no and ttt.trip_no > tt.trip_no
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html

Для каждого класса крейсеров, число орудий которого известно, пронумеровать (последовательно от единицы) все орудия.
Вывод: имя класса, номер орудия в формате 'bc-N'.
with a as(
select x.class,x.numGuns,row_number()over(partition by x.class order by x.numguns)n
from Classes x,classes y
where x.type='bc')
select distinct class,'bc-'+cast(n as char(2))
from a where numguns> =n
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html

Статистики Алиса, Белла, Вика и Галина нумеруют строки у таблицы Product.
Все четверо упорядочили строки таблицы по возрастанию названий производителей.
Алиса присваивает новый номер каждой строке, строки одного производителя она упорядочивает по номеру модели.
Трое остальных присваивают один и тот же номер всем строкам одного производителя.
Белла присваивает номера начиная с единицы, каждый следующий производитель увеличивает номер на 1.
У Вики каждый следующий производитель получает такой же номер, какой получила бы первая модель этого производителя у Алисы.
Галина присваивает каждому следующему производителю тот же номер, который получила бы его последняя модель у Алисы.
Вывести: maker, model, номера строк получившиеся у Алисы, Беллы, Вики и Галины соответственно.
select maker, model,
row_number() over (order by maker, model),
dense_rank() over (order by maker),
rank() over (order by maker),
count(*) over (order by maker)
from product
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html

Пусть
v1, v2, v3, v4, ... представляет последовательность вещественных чисел -
объемов окрасок b_vol, упорядоченных по возрастанию b_datetime, b_q_id,
b_v_id.
Найти
преобразованную последовательность P1=v1, P2=v1/v2, P3=v1/v2*v3,
P4=v1/v2*v3/v4, ..., где каждый следующий член получается из предыдущего
умножением на vi (при нечетных i) или делением на vi (при четных i).
Результаты
представить в виде b_datetime, b_q_id, b_v_id, b_vol, Pi, где Pi - член
последовательности, соответствующий номеру записи i. Вывести Pi с 8-ю
знаками после запятой.
with a as(
select *,row_number()over(order by b_datetime,b_q_id,b_v_id) n from utb)
select b_datetime,b_q_id,b_v_id,b_vol,
cast(exp(sm1)/exp(sm2) as numeric(12,8))k
from a x
cross apply
(select sum( iif(n%2<> 0,log(b_vol),0)) sm1,sum( iif(n%2=0,log(b_vol),0)) sm2 from a where n<=x.n)y
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html

Для пятого по счету пассажира из числа вылетевших из Ростова в апреле 2003 года определить компанию, номер рейса и дату вылета.
Замечание. Считать, что два рейса одновременно вылететь из Ростова не могут.
Select name, trip_no, date
from(
select row_number() over(order by date+time_out,ID_psg) rn,name,Trip.trip_no,date
from Company,Pass_in_trip,Trip
where Company.ID_comp=Trip.ID_comp and Trip.trip_no=Pass_in_trip.trip_no
and town_from='Rostov' and year(date)=2003 and month(date)=4)_
where rn=5
Все задачи и решения:
https://exercises-on-sql.blogspot.com/2017/02/select-sql.html
