2016-09-07 4 views
0

적어도 한 달에 한 번 이상 구입 한 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

귀하의 질의는 가깝지만 정확하지 않습니다. 문제는 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 
관련 문제