by OYS [SQL Query] [2024.08.30 15:04:56]
* MS-SQL 사용
with temp as
(
select
t1.order_no,
t1.id,
t1.total_price,
substring (t1.order_no, 1, 4) + '-' + substring (t1.order_no, 5, 2) + '-' + substring (t1.order_no, 7, 2) as order_no_1,
t2.order_no as var_2
from order_master t1 with (nolock)
left outer join order_cancel t2 with (nolock) on (t1.order_no = t2.order_no)
where t2.order_no is null
and substring (t1.order_no, 1, 4) + '-' + substring (t1.order_no, 5, 2) + '-' + substring (t1.order_no, 7, 2) between '2024-07-01' and '2024-07-31'
)
select sum (datediff (day, min (order_no_1), max (order_no_1))) as a,
count (datediff (day, min (order_no_1), max (order_no_1))) as b
from temp
이렇게 작성을 하면 '집계 또는 하위 쿼리가 포함된 식에서는 집계 함수를 수행할 수 없습니다.' 라는 메세지가 뜹니다
아마 sum, count 함수안에 또 다른 함수를 작성해서 그런 것 같습니다.
그래서 뒷 부분을
select sum (order_interval) as a,
count (order_interval) as b
from (
select
datediff (day, min (order_no_1), max(order_no_1)) as order_interval
from temp
)
이렇게 작성해보았는데도 에러가 발생합니다.
어떻게 수정을 하면 좋을지....
예상하신바와 같이 집계함수를 이중으로 사용하기 때문에 에러 이므로 인라인뷰로 한번 감싸 주어
뒷부분은 아래처럼 하면 에러는 안나겠지만...
SELECT sum(datediff (DAY,min_order_no_1,max_order_no_1) AS a , count(datediff (DAY,min_order_no_1,max_order_no_1) AS b FROM ( select min(order_no_1) min_order_no_1, max(order_no_1) max_order_no_1 from temp) ;
group by 절이 없다면 전체를 기준으로 하므로
a값은 sum이 있으나 마나할것이고 b 값은 1이 될것입니다.
이걸 원하시는 건 아닌거 같은데...
group by 절에 기준이 되는 컬럼을 넣어야 합니다.
order_no나 id 정도가 되지 않을까 조심스레 유추해 봅니다.