mysql рассчитать долг и депозитную базу по двум столбцам - PullRequest
2 голосов
/ 04 мая 2020

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

CREATE TABLE tblapp (
  `app_id` INTEGER,
  `cust_id` INTEGER,
  `app_price` INTEGER,
  `app_price_paid` INTEGER
);

INSERT INTO tblapp
  (`app_id`, `cust_id`, `app_price`, `app_price_paid`)
VALUES
  ('1', '1', '100', '100'),
  ('2', '2', '50', '0'),
  ('3', '1', '0', '100'),
  ('4', '3', '100', '50');

И у меня есть следующие sql и вывод:

SELECT 
cust_id,
(sum(COALESCE(app_price,0)) - sum(COALESCE(app_price_paid,0))) as total
FROM tblapp
group by cust_id;

| cust_id | total |
| ------- | ----- | 
| 1       | -100  |
| 2       |   50  |
| 3       |   50  |
|---------|-------|

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

Исходя из вышеизложенного, если я рассчитываю, что общая задолженность равна 0 (общая сумма (-100 + 50 + 50)).

Но реальная задолженность равна 100 (50 + 50 ) и депозит составляет 100 (-100).

Могу ли я получить запрос на вывод приведенной ниже базы данных на основе моих данных?

 debt  deposit
 100     100

Спасибо.

долг = как должны платить деньги.

депозит = сколько денег заплатил больше.

1 Ответ

2 голосов
/ 04 мая 2020

Вы можете использовать агрегацию еще раз:

WITH cte AS (
  SELECT cust_id,
         (sum(COALESCE(app_price,0)) - sum(COALESCE(app_price_paid,0))) as total
   FROM tblapp
  group by cust_id
)
SELECT SUM(CASE WHEN total< 0 THEN -total END) AS debt,
       SUM(CASE WHEN total>= 0 THEN total END) AS deposit
FROM cte;

db <> fiddle demo

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