我正在尝试检索某些型号的最低价格。每个型号都属于一个特定的组,该组属于一个产品。
我有以下表格:
产品
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(型号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分。有两个最小值为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
我不确定我是否理解您的表的键,以及问题
几乎没有什么问题
a) 答案应该是120
b) 如果产品没有价格,价格是否为空
c) 如果一个组中有一个产品的价格为空,而其他组中有价格,是否应算作0
以下是如何获得每组较低价格的总和,同时忽略product_group_optional:
选择t2.group_id,sum(t2.new_price)来自(选择t.group_id,t.new_price来自(选择po.group_id,if(ifnull(pgo.product_id,true),p.price,0)作为new_priceFROM产品p,product_overview poLEFT JOIN product_group_optional pgo ON po.group_id=pgo.group_id其中p.model_id=po.model_id按po.group_id、new_price订购)t分组依据t.GROUP_id)t2