воскресенье, 26 сентября 2021 г.

Топ купленных товаров

Есть таблица purchase с информацией о покупках. Поля pr_name, pr_count, pr_price, pr_date означают наименование товара, количество, цену за единицу и дата покупки товара. Другие поля не рассматриваются для упрощения. Необходимо найти топ 5 товаров за каждый день, купленных за последние 7 дней. Топ означает максимальную продажу, выраженную в прибыли:  количество * цену.

Вариант запроса, решающего задачу:

select pr_date

      ,pr_name

      ,pr_sum

      ,prank

  from (select trunc(pr_date) as pr_date

              ,pr_name

              ,sum(pr_count * pr_pice) as pr_sum

              ,row_number() over(partition by trunc(pr_date) 

                            order by sum(pr_count * pr_pice) descas prank

          from purchase

         where trunc(pr_date) > trunc(sysdate - 7)

         group by trunc(pr_date)

                 ,pr_name)

where prank <= 5;



Одинаковый набор оценок

 В таблице marks есть поле usr  с кодом пользователя и поле mrk с оценкой. Для упрощения, другие поля не рассматриваются. Задача:  вывести пользователей, у которых такой же уникальный набор оценок, как у пользователя u2. 

Вариант запроса, решающего задачу:

with agg as

(select distinct mrk

    from marks

   where usr = 'u2')

select m.usr

  from marks m

  left join agg a on a.mrk = m.mrk

  having count(m.mrk) = count(a.mrk)

     and m.usr <> 'u2'

group by m.usr;

 

Пример данных таблицы marks: