下面是订单表
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
我知道,一旦将产品id分组,它将只显示一个值'a'或'c'。这很好,我要找的是同时包含a和c的产品,但不想要值等于b的产品id
所以总结一下,只有3,4,6应该是分组的,这样我就不会对同一个顺序的重复项进行总结了。
最佳答案
试试这个:
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为值的产品id列表。所以内部查询的结果是(1,2,5)。
外部查询计算列表中不存在的产品id的价格总和。即不在(1,2,5)列表中
结果:
PRODUCT_ID TOTAL
3 16
4 28
6 8
参见SQL Fiddle中的结果。
关于mysql - 从一列中选择几行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28200783/