Как поделить результат расчета на группы? - PullRequest
0 голосов
/ 07 сентября 2018

Добрый день! Не могли бы вы помочь мне с запросом?

У меня есть таблица "платежей":

payments
user_id     amount     payment_time    sale_type
1           20          31.01.2011      card
1           10          02.01.2012      cash
3           10          03.01.2012      card
4           15          05.02.2012      cash
...and so on

Задача состоит в том, чтобы выбрать общую сумму платежей за 01.01.2012 - 30.01.2012 и разделить эту сумму на группы в зависимости от суммы, когда-либо выплаченной пользователем.

Группы "0-10" - если сумма равна 0 -10 $ «10 и более» - если сумма> 10 $.

Мой код:

SELECT * from (select IFnull(t.diapason,'total') as diapason, total_amount 
FROM 
    (SELECT p.user_id, p.amount as total_amount, CASE
        when amount<=10 then '0-10'
        when amount>10 then '10 and more' END AS diapason
           FROM (SELECT distinct payments.user_id, SUM(amount) AS amount 
                FROM payments inner JOIN (SELECT DISTINCT user_id 
                     FROM payments where payment_time between '2012-01-01' 
                     and '2012-01-30') a ON payments.user_id = a.user_id 
          GROUP BY payments.user_id) p) t  GROUP BY diapason WITH ROLLUP) as 
 t1  ORDER BY total_amount desc;

Что здесь не так?

Ожидаемый результат

diapason     total_amount
0-10              10     - here is user with id 3 
10 and more       10     - here is user with id 1 (because he ever payed 30)
total

1 Ответ

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

Попробуйте этот запрос -

select case when p2.amount <=10 then '0-10'
        else '10 and more' end diapason
      ,p1.amount "total amount"
      ,p1.payment_by_card
      ,p1.cash
from (select user_id, sum(amount) amount, payment_by_card, cash
      from payments
      where payment_time between '2012-01-01' and '2012-01-30'
      group by user_id, payment_by_card, cash) p1
join (select user_id, sum(amount) amount
      from payments
      group by user_id) p2
on p1.user_id = p2.user_id

Вот скрипка - http://www.sqlfiddle.com/#!9/22caaa/8

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