2016-09-07 237 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