Как рассчитать ранжирование по нескольким условиям? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть 2 таблицы:

activity
user_id login_time
1       2018-04-15
2       2018-04-18
3       2018-04-19
3       2018-04-20
1       2018-04-20
2       2018-04-20
4       2018-04-20

-

payments
user_id     amount
  1            10
  1            30
  2            100
  3            35
  4            0

Я ищу количество пользователей, у которых login_time = 20.04.2018 по группам.

Желаемый результат на 20.04.2018:

total_amount  number of users
0-10               1
10-20              0
30-50              2
50-and more        1

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вариант использования, когда и внутреннее соединение

select case when amount<=10 then '0-10' when amount>10 and amount<20 then '10-20'
when amount>=30 and amount<50 then '30-50'
when amount>=50 then '50-and more' end as total_amount,count(payments.user_id)
from payments inner join activity on payments.user_id=activity.user_id
where login_time='2018-04-20'
group by case when amount<=10 then '0-10' when amount>10 and amount<20 then '10-20'
when amount>=30 and amount<50 then '30-50'
when amount>=50 then '50-and more' end
0 голосов
/ 04 сентября 2018

Примерно так должно работать:

SELECT CASE WHEN b.amount < 10 THEN '0-10'
  WHEN b.amount < 20 THEN '11-20'
  WHEN b.amount < 30 THEN '21-30'
  WHEN b.amount < 40 THEN '31-40'
  WHEN b.amount < 50 THEN '41-50'
  ELSE '50 and more' END AS total_amount,
  count(DISTINCT b.user_id) AS number_of_users 
FROM activity a
JOIN payments b
ON a.user_id = b.user_id
WHERE a.login_time = '2018-04-18'
GROUP BY 1

Если в таблицах активности пользователи могут появляться только один раз в день, вы можете использовать счетчик (*) вместо счетчика (DISTINCT user_id).

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...