从列中选择多行

时间:2015-01-28 19:29:57

标签: mysql

以下是订单表

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应该出现分组,以便我不会总结相同订单的重复。

1 个答案:

答案 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中的结果。