2016-09-07 160 views
0

如果我需要显示在2014-01-01至2015-12-31的一个月中总计超过100分的每月至少购买一次的SQL产品名称,这是正确的做法吗?按月份排序

select b.ProductName, Sum(a.RequestedAmount) as summ 
from ProductRequest a 
join product b on a.productid=b.productid 
where a.AppDate >= '2014-01-01' and a.AppDate <= '2015-12-31' 
group by b.ProductName, month (a.appDate) 
having Sum(a.RequestedAmount) > 100 
+0

这是否给出了正确的结果? – Mureinik

+0

一般GROUP BY提示。在选择列表中具有相同的列(除了设置函数的参数),就像在group by子句中一样。 – jarlh

回答

2

您的查询接近但不完全正确。问题是,month()返回一个月从1数到12,你的时间跨度超过一年,那么你需要考虑一年到:

select p.ProductName, Sum(pr.RequestedAmount) as summ 
from ProductRequest pr join 
    Product p 
    on pr.productid = p.productid 
where pr.AppDate >= '2014-01-01' and pr.AppDate <= '2015-12-31' 
group by p.ProductName, year(pr.appDate), month(pr.appDate) 
having sum(pr.RequestedAmount) > 100; 

注:

  • 当使用表别名,表名的缩写比任意字母更容易遵循。
  • 通常情况下,您希望包括支出发生的月份。
  • 与您查询的不同之处在于group by子句中的year()
1
SELECT * FROM 
(
SELECT b.ProductName, month (a.appDate), Sum(a.RequestedAmount) as summ 
from ProductRequest a 
join product b on a.productid=b.productid 
where a.AppDate>='2014-01-01' and a.AppDate<='2015-12-31' 
group by b.ProductName, month (a.appDate) 
) x 
where x.summ>100