Я работаю со следующей структурой таблицы в 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>
то, что я попробовал: < /strong>
Я попытался вычислять в обращении путем группировки с помощью receipt_id и используя disful для обеспечения платного_аминга, рассматривается только один раз на 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>
Что я ищу: < /strong>
a mysql Query, который правильно рассчитывает непогашенную ежедневно, ежемесячные и годовые периоды. В соответствии с данными, которые у меня есть, является вынесением подразделения, которые должны быть "15 933".
Подробнее здесь: https://stackoverflow.com/questions/794 ... id-conside