sum, count 관련...(집계 또는 하위 쿼리가 포함된 식에서는 집계 함수를 수행할 수 없습니다.) 0 2 7,343

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 

 

이렇게 작성해보았는데도 에러가 발생합니다.

어떻게 수정을 하면 좋을지....

by 창조의날개 [2024.08.30 16:12:20]

예상하신바와 같이 집계함수를 이중으로 사용하기 때문에 에러 이므로 인라인뷰로 한번 감싸 주어

뒷부분은 아래처럼 하면 에러는 안나겠지만...

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 정도가 되지 않을까 조심스레 유추해 봅니다.


by 마농 [2024.09.02 15:11:41]
SELECT id
     , SUM(total_price) total_price
     , DATEDIFF(DAY, MIN(order_no_1), MAX(order_no_1)) + 1 days
     , COUNT(*) cnt
  FROM temp
 GROUP BY id
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입