下面是订单表

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/

10-11 02:58
查看更多