Поиск лучших типов платежей по общей стоимости и общему количеству транзакций - PullRequest
0 голосов
/ 30 января 2019

У меня есть таблица, Платежи , со следующими данными:

Схема (MySQL v5.7)

CREATE TABLE payments (
  Transaction_ID INT NOT NULL,
  Business_ID INT NOT NULL,
  Payment_Amount DECIMAL(25,2),
  Payment_Type VARCHAR(6),
  PRIMARY KEY (Transaction_ID)
 );

CREATE TABLE business_results (
  Business_ID INT NOT NULL,
  Top_Payment_Type_by_Dollar_Amount VARCHAR(6),
  Top_Payment_Type_by_Transactions VARCHAR(6),
  PRIMARY KEY (Business_ID)
);

INSERT INTO payments (Transaction_ID, Business_ID, Payment_Amount, Payment_Type)
  VALUES (1,2, 3.00, 'CASH'),
    (2,1,15.00,'CREDIT'),
    (3,4,5.00,'CASH'),
    (4,3,31.00,'CASH'),
    (5,4,2.00,'CREDIT'),
    (6,2,25.00,'CASH'),
    (7,2,30.00,'CREDIT'),
    (8,3,16.00,'CASH'),
    (9,1,7.00,'CREDIT'),
    (10,4,4.00,'CREDIT');

Запрос № 1

select * from payments;

| Transaction_ID | Business_ID | Payment_Amount | Payment_Type |
| -------------- | ----------- | -------------- | ------------ |
| 1              | 2           | 3              | CASH         |
| 2              | 1           | 15             | CREDIT       |
| 3              | 4           | 5              | CASH         |
| 4              | 3           | 31             | CASH         |
| 5              | 4           | 2              | CREDIT       |
| 6              | 2           | 25             | CASH         |
| 7              | 2           | 30             | CREDIT       |
| 8              | 3           | 16             | CASH         |
| 9              | 1           | 7              | CREDIT       |
| 10             | 4           | 4              | CREDIT       |

Просмотр на БД Fiddle

Тип транзакции состоит из «Кредит» или «Наличные»'

Я пытаюсь создать запрос со следующими результатами:

  • Столбец 1: Business_ID
  • Столбец 2: Укажите, какой тип платежа имел наибольшая общая сумма в долларах США по сумме типа платежа
  • Столбец 3: Укажите, какой тип платежа совершил наибольшее количество транзакций

На основе данныхпри условии, что результаты должны быть следующими:


+-------------+-----------------------------------+----------------------------------+
| Business_ID | Top_Payment_Type_by_Dollar_Amount | Top_Payment_Type_by_Transactions |
+-------------+-----------------------------------+----------------------------------+
|           1 | CREDIT                            | CREDIT                           |
|           2 | CREDIT                            | CASH                             |
|           3 | CASH                              | CASH                             |
|           4 | CREDIT                            | CREDIT                           |
+-------------+-----------------------------------+----------------------------------+

Как бы я поступил так же в одном запросе MySQL?

-

1 Ответ

0 голосов
/ 30 января 2019

Итак, первая часть проблемы может быть решена следующим образом ...

SELECT x.business_id
     , x.payment_type
  FROM payments x 
  JOIN 
     ( SELECT business_id
            , MAX(payment_amount) payment_amount 
         FROM (SELECT * FROM payments) n
        GROUP  
           BY business_id
     ) y 
    ON y.business_id = x.business_id 
   AND y.payment_amount = x.payment_amount
 ORDER
    BY x.business_id;

... подзапрос n не является строго необходимым - я мог (идолжен) только что использовал FROM payments, но таким образом он дает ключ к решению следующей части проблемы, где по сути вам просто нужно заменить n на ...

SELECT business_id
     , payment_type
     , SUM(payment_amount) total 
  FROM payments 
 GROUP 
    BY business_id
     , payment_type; 

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

...