以下是订单表
order_table
product_id amount price
1 2 4
1 5 4
2 2 4
2 3 4
3 4 4
4 3 4
4 2 4
4 2 4
5 4 4
5 1 4
6 1 4
6 1 4
以下是我的价值表
value_table
product_id value
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 d
3 c
4 a
4 d
4 c
5 a
5 b
5 c
6 a
6 d
6 c
我想要达到的目标如下表所示。
product_id amount*price as total values
3 12 a,c and not equal to b
4 28 a,c and not equal to b
6 8 a,c and not equal to b
我明白一旦你对product_id进行分组,那么它只会显示一个值=' a'或者' c'。我想要的是那些包含a,c但不想要一个值等于= b的product_id的产品。 总而言之,只有3,4,6应该出现分组,以便我不会总结相同订单的重复。
答案 0 :(得分:1)
试试这个:
SELECT product_id,SUM(amount*price) as Totalprice
FROM order_table
WHERE product_id NOT IN
(SELECT product_id
FROM value_table
WHERE value='b')
GROUP BY product_id
<强>解释强>
内部查询选择具有b作为值的product_id列表。因此内部查询将得到(1,2,5)的结果。
外部查询计算该列表中不存在的product_ids的价格总和。即,不在(1,2,5)
的列表中<强>结果:强>
PRODUCT_ID TOTAL
3 16
4 28
6 8
请参阅SQL Fiddle中的结果。