У меня есть приведенный ниже код, который я использую для подсчета клиентов, расходов, транзакций и маржи по возрасту и полу. Мне нужно добавить еще одно утверждение, чтобы я также мог создавать группы расходов.
SELECT
gender,
agegroup,
Count(DISTINCT individual_id),
Count(DISTINCT transaction_number),
SUM(spend)
FROM
(
SELECT
gender,
CASE WHEN age < 18 THEN '<18' WHEN age BETWEEN 18
AND 24 THEN '18-24' WHEN age BETWEEN 25
AND 32 THEN '25-32' WHEN age BETWEEN 33
AND 39 THEN '35-39' WHEN age BETWEEN 40
AND 46 THEN '40-46' WHEN age BETWEEN 47
AND 53 THEN '46-52' WHEN age BETWEEN 54
AND 60 THEN '53-58' WHEN age > 60 THEN '61+' END AS AGEGROUP,
individual_id,
transaction_number,
spend
FROM
(SELECT
gender,
age AS age,
a.individual_id as individual_id,
dollar_value_us as Spend,
transaction_number as transaction_number
FROM transaction_detail_mv a
join gender_details b on a.individual_id = b.individual_id)
)
GROUP BY
gender,
agegroup
ORDER BY
gender,
agegroup
Текущие результаты:
GENDER | AGEGROUP | COUNT(DISTINCTINDIVIDUAL_ID) | COUNT(DISTINCTTRANSACTION_NUMBER) | SUM(SPEND)
:----- | :------- | ---------------------------: | --------------------------------: | ---------:
F | 46-52 | 1 | 2 | 22
M | 18-24 | 1 | 1 | 11
M | 40-46 | 2 | 6 | 62
Поэтому вместо фильтрации по всему запросу, чтобы найти число клиентов, которые находятся в диапазоне от $ 10 до $ 23, как показано ниже: мне просто нужен запрос, который разделил бы данные на когорты расходов.
select * from (SELECT
gender,
agegroup,
Count(DISTINCT individual_id),
Count(DISTINCT transaction_number),
SUM(spend) as spend
FROM
(
SELECT
gender,
CASE WHEN age < 18 THEN '<18' WHEN age BETWEEN 18
AND 24 THEN '18-24' WHEN age BETWEEN 25
AND 32 THEN '25-32' WHEN age BETWEEN 33
AND 39 THEN '35-39' WHEN age BETWEEN 40
AND 46 THEN '40-46' WHEN age BETWEEN 47
AND 53 THEN '46-52' WHEN age BETWEEN 54
AND 60 THEN '53-58' WHEN age > 60 THEN '61+' END AS AGEGROUP,
individual_id,
transaction_number,
spend
FROM
(SELECT
gender,
age AS age,
a.individual_id as individual_id,
dollar_value_us as Spend,
transaction_number as transaction_number
FROM transaction_detail_mv a
join gender_details b on a.individual_id = b.individual_id)
)
GROUP BY
gender,
agegroup
ORDER BY
gender,
agegroup) where spend between 10 and 20
Я ищу следующие когорты расходов:
<$10
$10-$20
$20-$30
$30-$40
$40+
Это ссылка на скрипку:
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=fe7bbe67da923fde05b5daf8ad991e7c
Так, например, x количество клиентов находится в пределах $ 10-40 $ диапазон, который является женщиной и принадлежит к 18-24 возрастным диапазонам. Это то, к чему я в конечном итоге пытаюсь добраться. Есть ли способ включить это в мой текущий запрос?
любая помощь будет оценена. Спасибо !!