powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите решить задачки
4 сообщений из 4, страница 1 из 1
помогите решить задачки
    #40093586
derart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я совсем недавно начал знакомиться с SQL и тут по работе потребовалось решить несколько задач, которые поставили меня в тупик.
Помогите, плиз.

есть 2 таблицы
Таблица 1
COMMIT_DATEContract_idProd_nameBALANCESTART_DTCLOSE_DT23.04.18322456Защищенный 100 000 01.12.1702.07.20322458Нота - 12.02.1903.01.21322459Феникс 30 000 23.09.2017.05.19322460Нота 600 000 04.12.1612.04.14322461Пороговый 10 000 17.04.13 31 10 17null322462Феникс 20 000 000 06.11.19null3248968Нота 800 000 18.14.2019………………………………………………null3248970Пороговый 450 000 15.10.1911 06 213248972Защищенный 250 000 18.08.18

Таблица 2
IDcontract_idSUMdatetype25643322456 18800 02.06.20INCOMING25643322458 15645 22.11.20SMS452632322459 8403 23.02.19SMS98744322460 24535 07.04.18SMS3032976322461 14000 17.09.18Roaming304598322462 17326 12.06.20SMS………………………………………64398323537962 6784 17.08.21DUMMY
Задачи следующие:
1. Вывести список клиентов, кто посылал SMS в январе 2020 и не посылал их в марте 2020
2. Определить долю клиентов, получает только INCOMING ( входящие звонки) за 1 квартал 2019 года от всех операций.
3. Проранжировать договора, с наибольшим количеством SMS за 4 квартал 2019 и вывести топ 100 договоров с количеством SMS.
4. Вывести договора и долю суммы за SMS от максимального баланса клиента из Таблицы 1 за декабрь 2019.
5. Определить долю клиентов, использующих роуминг 1 раз в 2 месяца
Операции с типом Dummy не должны учитываться в анализе и расчетах по всем 5 задачам

Поможите, кто чем может, плз.
...
Рейтинг: 0 / 0
помогите решить задачки
    #40093590
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда просите помочь, хорошим тоном считается подготовить данные в удобном виде и показать хотя бы свои попытки решить задачу.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with billing(ID, contract_id, bill_sum, bill_date, bill_type)
as (
select 25643, 322456,  18800, date '2020-06-02', 'INCOMING' from dual union all
select 25643, 322458,  15645, date '2020-11-22',  'SMS' from dual union all
select 452632,  322459,  8403,  date '2019-02-23',  'SMS' from dual union all
select 4526,  322459,  8403,  date '2020-01-23',  'SMS' from dual union all
select 9874, 322460,  24535, date '2020-01-10',  'SMS' from dual union all
select 98744, 322460,  24535, date '2018-04-07',  'SMS' from dual union all
select 3032976, 322461,  14000, date '2012-09-17',  'Roaming' from dual union all
select 3032976, 322459,  14000, date '2020-03-17',  'Roaming' from dual union all
select 304598,  322462,  17326, date '2020-06-12',  'SMS' from dual union all
select 6439832, 3537962, 6784,  date '2012-08-17',  'DUMMY' from dual
)

select * from billing b
where b.bill_date between date '2020-01-01' and date '2020-01-31'
-- and not exists (select 1 from billing b2 where b2.contract_id = b.contract_id and b2.bill_date between date '2020-03-01' and date '2020-03-31')
...
Рейтинг: 0 / 0
помогите решить задачки
    #40093591
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Век живи, век учись.

Так можно.

Код: plsql
1.
2.
3.
select count(distinct contract_id) from billing b2 where b2.bill_date between date '2019-01-01' and date '2019-12-31'
union all
select count(distinct contract_id) from billing b



А так нельзя.

Код: plsql
1.
2.
3.
select (select count(distinct contract_id) from billing where bill_date between date '2019-01-01' and date '2019-12-31') v1,
       count(distinct contract_id) v2
  from billing b
...
Рейтинг: 0 / 0
помогите решить задачки
    #40093592
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проранжировать договора, с наибольшим количеством SMS

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select contract_id, smski
  from (
select contract_id, count(1) smski
  from billing b
where b.bill_date between date '2020-01-01' and date '2020-12-31'
and b.bill_type = 'SMS'
group by contract_id
      ) order by smski desc



Операции с типом Dummy не должны учитываться

Код: plsql
1.
and b.bill_type != 'DUMMY'



от максимального баланса клиента

Неплохо бы указать, где он, баланс хранится.

Дальше сами упражняйтесь.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите решить задачки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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