我正在尝试检索某些型号的最低价格。 每个模型都属于某个产品的某个组。
我有下表:
产品
model_id product_id price
1 1 100
2 1 120
3 1 100
4 1 200
5 1 250
10 1 20
11 1 50
12 1 50
产品概述
model_id product_id group_id
1 1 A
2 1 A
3 1 A
4 1 A
5 1 A
10 1 B
11 1 B
12 1 B
产品组可选
group_id product_id
B 1
某些群组可以是可选的,这意味着价格将为零,除非成员想要其他选择。
所以在上面的例子中,我想获得每组最低价格的总和。 我们有两组,A组和B组。 A 组最低价格值为 100(model_id 1 和 3) B 组最低价格值为 20 (model_id 10),但由于 B 组是可选的,因此这意味着最低价格值为 0。
最小值总和:100(A 组)+ 0(B 组)= 100
到目前为止我的代码:
SELECT po.group_id,
CASE WHEN
((SELECT COUNT(*) FROM product_group_optional pgo
WHERE po.group_id = group_id AND po.product_id = 1 AND po.product_id = product_id) >= 1)
THEN SUM(0)
ELSE SUM(p.price)
END AS sum_price
FROM product_overview po, product p
WHERE po.product_id = 1
AND po.model_id = p.model_id
AND p.price = (
SELECT MIN(p2.price)
FROM product p2, product_overview po2
WHERE po2.product_id = 1 AND po2.group_id = po.group_id
AND po2.model_id = p2.model_id
)
GROUP BY po.group_id
输出:
group_id sum_price
A 200
B 0
问题是我在 A 组得到了 200 分,但实际上应该是 100 分。 有 2 个模型的最小值为 100,即模型 1 和模型 3。我假设它们的总和 = 100 + 100 = 200。
问题a)但我只想取最小值,无论这个值存在多少次。
问题 b)另外,我正在尝试获取 A 组和 B 组的两个输出 SUM 的总和。
但我不知道该怎么做。 我希望在这个查询中完成它。
期望的输出
Sum of all groups
100
有人可以引导我走向正确的方向吗?
最佳答案
您可以使用以下查询:
SELECT SUM(min_price)
FROM (
SELECT po.group_id,
MIN(CASE WHEN pgo.group_id IS NULL THEN price ELSE 0 END) AS min_price
FROM Product AS p
INNER JOIN Product_overview AS po
ON p.product_id = po.product_id AND p.model_id = po.model_id
LEFT JOIN Product_group_optional AS pgo ON po.group_id = pgo.group_id
GROUP BY po.group_id) AS t
关于php - 从Mysql获取每组最小值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482532/