我在编写适当的查询来解决我的问题时遇到了很大的问题。如此简短地描述我的问题:
A是由乘积B和C构成的集合。例如,集合A由4xB和1xC构成。集合A由4xB和1xC构成。
Set A
4x B
1x C
我也可以单独出售产品B或C。
因此,如果我出售一套A和一种产品B,我应该得到类似
Product: Sold:
A 1
B 5
C 1
数据结构:
table products
id name
1 A
2 B
3 C
table products_subset
id parent_id product_id amount
1 1 2 4
2 1 3 1
table documents
doc_id type code
1 bill INV-1
2 bill INV-2
table document_products
id doc_id prod_id amount price
1 1 1 1 10
2 2 2 1 2
如果查询无法解决此问题,那么我将只编写代码来进行数学运算,但希望在查询本身中做尽可能多的事情。
最佳答案
SELECT
product_id, `name`, SUM(amount)
FROM
(SELECT
dp.product_id, p.`name`, dp.amount
FROM
document_products dp
JOIN products p ON p.id = dp.product_id
UNION ALL
SELECT
ps.product_id, p1.`name`, ps.amount
FROM
document_products dp
JOIN products p ON p.id = dp.product_id
JOIN products_subset ps ON dp.product_id = ps.parent_id
JOIN products p1 ON p1.id = ps.product_id) AS t1
GROUP BY 1 , 2
结果
id name amount
1 A 1
2 B 5
3 C 1
关于mysql - MySQL如何获得项目的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45101392/