【发布时间】:2016-11-23 18:22:01
【问题描述】:
我正在尝试检索某些型号的最低价格。 每个模型都属于属于某个产品的某个组。
我有以下表格:
产品
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 of all groups
100
谁能指引我正确的方向?
【问题讨论】:
-
我认为你应该限制 1 这样你就只能得到一个值?
-
您好 Ahmad,我试图在底部的“AND p.price =”内的“选择查询”中限制它,但它不起作用。
-
在您的查询中,您在联接中使用
attribute_id,但不要在结构中提及该列 -
对不起 Philipp,它的意思是 model_id。马上修复
-
好的,你想在这个查询中解决问题 a) AND b) 吗?