Advertisement
Guest User

Untitled

a guest
Sep 12th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- 1. Выбрать для каждого клиента количество заказов ценой меньше 1000 и больше 1000. (client_id, count1, count2)
  2. select cl.name,
  3.        (select count(*) from "order" where "order".price < 1000 and cl.id = "order".client_id),
  4.        (select count(*) from "order" where "order".price > 1000 and cl.id = "order".client_id)
  5. from client cl;
  6.  
  7. select cl.name,
  8.        count(ord.price) filter ( where  ord.price > 1000) over w as num1,
  9.        count(ord.price) filter ( where  ord.price < 1000) over w as num2
  10. from client cl
  11.          join "order" ord on ord.client_id = cl.id
  12.      window w as (PARTITION BY cl.name);
  13.  
  14. -- 2. Выбрать третий заказ для каждого клиента ( id, client_id, price)
  15. with cte as (select ord.*,
  16.                ROW_NUMBER() over w as row_num
  17.         from client cl
  18.         join "order" ord on ord.client_id = cl.id
  19.          window w as (PARTITION BY cl.name order by ord.id))
  20. select *
  21. FROM cte
  22. where row_num = 3;
  23.  
  24. -- 3. Выбрать для каждого клиента третий заказ сделанный после заказа стоимостью больше 1000 ( id, client_id, price)
  25. with cte as (select ord.*,
  26.                     lead(ord.id, 3) over (PARTITION BY cl.name order by ord.id) as search_order_id
  27.              from client cl
  28.                       join "order" ord on ord.client_id = cl.id),
  29.      cte2 as (select search_order_id
  30.               FROM cte
  31.               where price > 1000 and search_order_id is not null)
  32. select cte.id, cte.client_id, cte.price
  33. FROM cte, cte2
  34. where cte2.search_order_id = cte.id;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement