2016-09-07 7 views
0

月に少なくとも1回は購入したSQL製品名で表示する必要がある場合は、その月の合計数が100ポイントを超える合計2014-01-01〜2015-12-31これは正しいアプローチですか?月間のグループ数

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

あなたの質問はよく近似していますが、正しくはありません。

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; 

注:問題はmonth()は、あなたが考慮に年間取る必要があるので、あなたの時間スパンが、年を超える1〜12月の番号を返すことである

  • 表の別名を使用して、テーブル名の略語は、任意の文字よりもはるかに簡単です。
  • 多くの場合、支出が発生した月を含めることをお勧めします。
  • クエリの違いは、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