데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
WITH
T
AS
(
SELECT
'itemA'
ITEM, 350000
DOMAMT
FROM
DUAL
UNION
ALL
SELECT
'itemB'
ITEM, 290000
DOMAMT
FROM
DUAL
UNION
ALL
SELECT
'itemC'
ITEM, 170000
DOMAMT
FROM
DUAL
UNION
ALL
SELECT
'itemD'
ITEM, 100000
DOMAMT
FROM
DUAL
UNION
ALL
SELECT
'itemE'
ITEM, 90000
DOMAMT
FROM
DUAL
)
SELECT
ITEM, DOMAMT
FROM
(
SELECT
ITEM, DOMAMT
,
SUM
(DOMAMT) OVER(
ORDER
BY
DOMAMT
DESC
) DOMAMTSUM
,
SUM
(DOMAMT) OVER() * 0.8
TOT80PER
FROM
T
)
WHERE
DOMAMTSUM <= TOT80PER
이걸 sql로 변환하고 싶은데 OVER(ORDER
BY
DOMAMT
DESC
) 이부분 변환을 어떻게 해야할지 도통 모르겠습니다
알려주세요
Comment 4
-
이리
2016.09.01 16:16
;WITH T AS(SELECT 'itemA' ITEM, 350000 DOMAMT UNION ALLSELECT 'itemB' ITEM, 290000 DOMAMT UNION ALLSELECT 'itemC' ITEM, 170000 DOMAMT UNION ALLSELECT 'itemD' ITEM, 100000 DOMAMT UNION ALLSELECT 'itemE' ITEM, 90000 DOMAMT)SELECT ITEM, DOMAMTFROM(SELECT ITEM, DOMAMT, SUM(DOMAMT) OVER(ORDER BY DOMAMT DESC) DOMAMTSUM, SUM(DOMAMT) OVER() * 0.8 TOT80PERFROM T) AS TWHERE DOMAMTSUM <= TOT80PER이렇게 하면 원하는 결과가 안나오시나요? -
하늘양
2016.09.01 16:24
메시지 102, 수준 15, 상태 1, 줄 25
'order' 근처의 구문이 잘못되었습니다.이렇게 나와서요 ㅠㅠ
-
이리
2016.09.01 17:13
아 2008이시군요
SUM OVER()는 2012부터 지원하나 보네요;;
http://stackoverflow.com/questions/7652511/sql-server-2008-using-sum-overorder-by
이 문서가 도움이 되셨으면 좋겠네요.
-
하늘양
2016.09.01 17:50
감사합니다. 해결했네요 감사합니다.