2011-05-27 168 views
0

我想创建一个查询,它会在一些折扣已经取消它的初始值后给我一个产品的价值。MySQL - 在计算中使用GROUP_CONCAT值?

这是我到目前为止的简化版本:

SELECT 
p.price 
GROUP_CONCAT(d.amount) AS discounts 
FROM products p 
LEFT OUTER JOIN discounts d 
ON d.product_id = p.id 
GROUP BY p.id 

凡discounts.amount是一个十进制值。

编辑:例如,如果存在与值分别为10和15的两个对应的折扣和初始产品价格为50,计算将我可以执行计算查询内返回25

有反正我想要什么?

任何意见将不胜感激。

谢谢。

+0

您可以发布示例数据和预期的结果? – piotrm 2011-05-27 15:36:14

回答

1

有一个SUM()方法:

SELECT p.price, 
     p.price - COALESCE(SUM(d.amount), 0) as discounted_price, 
     GROUP_CONCAT(d.amount) AS discounts 
FROM products p 
LEFT OUTER JOIN discounts d 
ON d.product_id = p.id 
GROUP BY p.id 
+0

我想我可能会得到这个来做我需要的,谢谢! – Dan 2011-05-27 15:51:07

+0

在没有COALESCE的情况下工作。 – Dan 2011-05-27 15:58:37

+0

我添加了coalesce,因为我不确定MySQL如何在打折时找不到匹配的连接时作出反应。如果这导致null(如Postgres中所做的那样),则需要合并以避免获得null值作为discounted_price。 – 2011-05-27 16:00:09