SQL группировка в группе результатов - PullRequest
1 голос
/ 09 июля 2019

У меня есть таблица «платежей» со следующими данными

+---------------------------------------+
|   status    |  currency   |  amount   |  
+---------------------------------------+
| ------------------------------------- |
| paid        |  USD        |  10       |  
| pending     |  USD        |  20       | 
| processing  |  GBP        |  30       | 
| paid        |  GBP        |  40       | 
| paid        |  EUR        |  50       | 
| pending     |  USD        |  60       | 
| processing  |  EUR        |  70       | 
+----------------------------------------+

Мне нужно написать запрос, который даст мне результаты в следующем формате

Paid : 3 
Processing: 2
Pending: 2

Ясмог сделать это, используя следующий запрос

select status, count(status)
from payments
group by status;

Теперь мне также нужно знать сумму сумм, сгруппированных по валютам для каждой из этих групп высокого уровня.Например,

Для статуса «Оплачено», в котором есть 3 записи, мне также нужно

USD: 10
GBP: 40
EUR: 50

Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 09 июля 2019
select status, currency, sum(amount)
from payments
group by status, currency;
0 голосов
/ 09 июля 2019

Первый запрос должен выглядеть примерно так:

SELECT INITCAP(STATUS) || ' : ' || COUNT(*) AS OUTPUT_TEXT
  FROM PAYMENTS
  GROUP BY STATUS
  ORDER BY CASE STATUS
             WHEN 'paid' THEN 1
             WHEN 'processing' THEN 2
             WHEN 'pending' THEN 3
             ELSE 4
           END

Второй запрос должен быть

SELECT CURRENCY || ': ' || SUM(CURRENCY) AS OUTPUT_TEXT
  FROM PAYMENTS
  GROUP BY CURRENCY
  ORDER BY CASE CURRENCY
             WHEN 'USD' THEN 1
             WHEN 'GBP' THEN 2
             WHEN 'EUR' THEN 3
             ELSE 4
           END

Удачи.

0 голосов
/ 09 июля 2019

Я думаю, что вы хотите:

select status, currency, count(*), sum(amount)
from payments
group by grouping sets ( (status, currency), (status) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...