ivideon
Составьте запрос для получения списка клиентов с возрастом выше среднего
ID FirstName Age
1 Alexey 40
2 Sergey 30
3 Vladimir null
4 Oleg 50
;with customer as
(
select 1 as id, 'Alexey' as first_name, 40 as age
union all
select 2 as id, 'Sergey' as first_name, 30 as age
union all
select 3 as id, 'Vladimir' as first_name, null as age
union all
select 4 as id, 'Oleg' as first_name, 50 as age
), cte as
(
select avg(age) middle, sum(age), count(age)
from customer
)
select *
from customer, cte
where age > middle
Есть таблица t1, с полями:
- id – идентификатор клиента,
- data – дата транзакции,
- tran – сумма транзакций клиента за день.
| Id | data | tran |
|---|---|---|
| 5142 | 01.10.2024 | 87 505 |
| 5142 | 02.10.2024 | 16 556 |
| 5142 | 03.10.2024 | 31 794 |
| 4644 | 01.10.2024 | 1 601 |
| 4644 | 02.10.2024 | 15 151 |
| 4644 | 03.10.2024 | 78 421 |
| 4644 | 04.10.2024 | 19 676 |
| 5852 | 01.10.2024 | 92 020 |
| 5852 | 02.10.2024 | 24 202 |
| 3819 | 01.10.2024 | 69 589 |
| 3819 | 02.10.2024 | 4 614 |
| 3819 | 03.10.2024 | 53 346 |
Вывести:
- Трех клиентов, имеющих максимальные дневные транзакции (id, data, tran)
with cte as
(
select *, row_number() over (partition by data order by tran desc) rn
from t1
)
select *
from cte
where rn <= 3
- Трех клиентов с максимальным ростом транзакций по отношению к предыдущему дню.
with cte as
(
select *, lag(tran) over (partition by Id order by tran desc) lag_tran
from t1
)
select top 3 with ties *
from cte
order by (tran - lag_tran) desc