SQL 聚合函数
Posted
技术标签:
【中文标题】SQL 聚合函数【英文标题】:SQL aggregate functions 【发布时间】:2009-02-04 09:06:38 【问题描述】:我有一个类似的问题SQL products/productsales
我想做同样的查询,但不是只检查数量,而是要检查“总计”(即数量 * 价格)。 “价格”是销售表中的一个字段。
这是该链接上建议的原始查询:
SELECT p.[name]
FROM products p
WHERE p.product_id in (SELECT s.product_id
FROM productsales s
WHERE s.[date] between @dateStart and @dateEnd
GROUP BY s.product_id
HAVING Sum(s.quantity) > @X )
所以我需要将每个销售的 (s.quantity*s.price) 相加,然后与 @X 进行比较,而不是 Sum(s.quantity)。 (每次销售价格可能不同)
【问题讨论】:
能否插入您的查询和错误信息?您可以编辑您的问题。 【参考方案1】:HAVING (Sum(s.quantity*s.price)) > @X
可以解决问题吗?
【讨论】:
我正忙着测试这个。似乎是对的。我稍后会编辑此评论。谢谢! 看来我无法编辑 cmets :) 对垃圾邮件感到抱歉。无论如何,我已经编辑了我的问题。如果每次销售的价格都相同,则您的原始答案有效。【参考方案2】:(来自 Cagcowboy 的回答被标记为接受,但评论似乎表明它不起作用,所以这是另一种方法)
此代码使用派生表首先计算出每个产品的“总计”,然后将分组等叠加在上面。
SELECT p.name from products p
WHERE p.product_id IN
(SELECT product_id from
(SELECT product_id, (quantity * price) as total
FROM productsales WHERE date between @dateStart and @dateEnd) as s
GROUP by s.product_id
HAVING sum(total) > @x)
【讨论】:
以上是关于SQL 聚合函数的主要内容,如果未能解决你的问题,请参考以下文章