Я работаю со следующей структурой таблицы в MySQL: < /p>
SELECT
sale_id,
unit_id,
quantity_sold,
total_price,
bought_price,
paid_amount,
tax_percentage,
sold_by,
receipt_id,
customer_id,
shop_id,
payment_method,
sale_date
FROM sales;
< /code>
Мне нужно рассчитать непогашенную сумму для ежедневных, ежемесячных и годовых периодов. Расчет для выявления заключается в следующем: < /p>
Неоплачивающая сумма для продажи рассчитывается по:
otal_price для этой продажи - PALE_AMOUNT для этой продажи.
Однако Проблема заключается в том, что для каждой receipt_id я хочу подсчитать платный_амант только один раз. Если несколько строк имеют одинаковую chestipt_id, платный_амаунт должен быть вычтен только один раз для этого receipt_id. < /P>
То, что я попробовал:
Я попытался вычислять в обращении путем группировки с помощью receipt_id и с использованием различия, чтобы убедиться, что платный_амонт рассматривается только один раз на petipt_id, но я все еще получаю неверные результаты. < /p>
Вот запрос, который я пробовал: < /p>
SELECT
COALESCE(FORMAT(SUM(CASE
WHEN DATE(s.sale_date) = CURDATE() THEN s.total_price
ELSE 0
END), 2), '0.00') AS todays_income,
COALESCE(FORMAT(SUM(CASE
WHEN YEAR(s.sale_date) = ? AND MONTH(s.sale_date) = MONTH(CURDATE()) THEN s.total_price
ELSE 0
END), 2), '0.00') AS monthly_income,
COALESCE(FORMAT(SUM(CASE
WHEN YEAR(s.sale_date) = ? THEN s.total_price
ELSE 0
END), 2), '0.00') AS yearly_income,
-- Calculate profit correctly (bought_price * quantity_sold)
COALESCE(FORMAT(SUM(CASE
WHEN DATE(s.sale_date) = CURDATE() THEN (s.total_price - (s.bought_price * s.quantity_sold))
ELSE 0
END), 2), '0.00') AS todays_profit,
COALESCE(FORMAT(SUM(CASE
WHEN YEAR(s.sale_date) = ? AND MONTH(s.sale_date) = MONTH(CURDATE()) THEN (s.total_price - (s.bought_price * s.quantity_sold))
ELSE 0
END), 2), '0.00') AS monthly_profit,
COALESCE(FORMAT(SUM(CASE
WHEN YEAR(s.sale_date) = ? THEN (s.total_price - (s.bought_price * s.quantity_sold))
ELSE 0
END), 2), '0.00') AS yearly_profit,
-- Calculate outstanding amount (total_price - paid_amount) correctly by considering distinct receipt_id
COALESCE(FORMAT(SUM(CASE
WHEN DATE(s.sale_date) = CURDATE() THEN (s.total_price -
(SELECT COALESCE(SUM(paid_amount), 0)
FROM sales WHERE receipt_id = s.receipt_id GROUP BY receipt_id))
ELSE 0
END), 2), '0.00') AS todays_outstanding,
COALESCE(FORMAT(SUM(CASE
WHEN YEAR(s.sale_date) = ? AND MONTH(s.sale_date) = MONTH(CURDATE()) THEN (s.total_price -
(SELECT COALESCE(SUM(paid_amount), 0)
FROM sales WHERE receipt_id = s.receipt_id GROUP BY receipt_id))
ELSE 0
END), 2), '0.00') AS monthly_outstanding,
COALESCE(FORMAT(SUM(CASE
WHEN YEAR(s.sale_date) = ? THEN (s.total_price -
(SELECT COALESCE(SUM(paid_amount), 0)
FROM sales WHERE receipt_id = s.receipt_id GROUP BY receipt_id))
ELSE 0
END), 2), '0.00') AS yearly_outstanding
FROM sales s
< /code>
Что я ищу:
a mysql Query, который правильно рассчитывает непогашенную p>
Вот тест, работающий на https://onecompiler.com/mysql/4392g6rj5
Что мне нужно в соответствии с данными, которые у меня есть, - это исход быть "15 933"
Подробнее здесь: https://stackoverflow.com/questions/794 ... receipt-id
Как вычислять ежедневно, ежемесячно и ежегодно вдрушится в MySQL с помощью receipt_id, учитывая платный_амаунт только од ⇐ MySql
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение