[英]SQL query get sum of sums
Please help me with the problem: I have query:请帮我解决这个问题:我有疑问:
SELECT drugs_shipment.drug_id,
drugs_drug.name AS drug_name,
drugs_drugunit.name AS drug_unit,
drugs_shipment.initial_amount - SUM(IFNULL(drugs_movement.amount, "0")) OVER (PARTITION BY drugs_shipment.id) AS total_amount
FROM drugs_shipment
JOIN drugs_drug ON drugs_shipment.drug_id = drugs_drug.id
JOIN drugs_drugunit ON drugs_drug.unit_id = drugs_drugunit.id
LEFT JOIN drugs_movement ON (drugs_movement.shipment_id = drugs_shipment.id AND drugs_movement.DATE < "2025-12-11" )
WHERE drugs_shipment.date_of_comming < "2025-12-11"
AND (drugs_shipment.date_of_run_out IS NULL OR drugs_shipment.date_of_run_out > "2025-12-11")
Next, i need sum of total_amount in fields with the same drugs_shipment.drug_id What is whrong?接下来,我需要具有相同 drugs_shipment.drug_id 的字段中的 total_amount 之和 什么是错的? How to solve this problem?
如何解决这个问题呢?
But this doesn't work:但这不起作用:
SELECT drugs_shipment.drug_id,
drugs_drug.name AS drug_name,
drugs_drugunit.name AS drug_unit,
SUM (drugs_shipment.initial_amount - SUM(IFNULL(drugs_movement.amount, "0")) OVER (PARTITION BY drugs_shipment.id)) AS total_amount
FROM drugs_shipment
JOIN drugs_drug ON drugs_shipment.drug_id = drugs_drug.id
JOIN drugs_drugunit ON drugs_drug.unit_id = drugs_drugunit.id
LEFT JOIN drugs_movement ON (drugs_movement.shipment_id = drugs_shipment.id AND drugs_movement.DATE < "2025-12-11" )
WHERE drugs_shipment.date_of_comming < "2025-12-11"
AND (drugs_shipment.date_of_run_out IS NULL OR drugs_shipment.date_of_run_out > "2025-12-11")
GROUP BY drugs_shipment.drug_id
You are not allowed using window functions (the OVER clause) and grouping (the GROUP BY clause) at the same time.不允许同时使用 window 函数(OVER 子句)和分组(GROUP BY 子句)。 You need to use another window function or nested query to do this.
您需要使用另一个 window function 或嵌套查询来执行此操作。
SELECT drug_id
,drug_name
,drug_unit
,SUM(total_amount) OVER (PARTITION BY drug_id)
FROM
(
SELECT drugs_shipment.drug_id,
drugs_drug.NAME AS drug_name,
drugs_drugunit.NAME AS drug_unit,
drugs_shipment.initial_amount - Sum(Ifnull(drugs_movement.amount, "0")) OVER (partition BY drugs_shipment.id) AS
total_amount
FROM drugs_shipment
JOIN drugs_drug
ON drugs_shipment.drug_id = drugs_drug.id
JOIN drugs_drugunit
ON drugs_drug.unit_id = drugs_drugunit.id
LEFT JOIN drugs_movement
ON ( drugs_movement.shipment_id = drugs_shipment.id
AND drugs_movement.date < "2025-12-11" )
WHERE drugs_shipment.date_of_comming < "2025-12-11"
AND ( drugs_shipment.date_of_run_out IS NULL
OR drugs_shipment.date_of_run_out > "2025-12-11" )
) DS
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.