Mysql에서 ratio_to_report와 partition by 적용하는 방법? 0 1 3,353

by TigerStone Mysql [2017.05.24 06:09:39]


Oracle에서 사용하던 SQL문이 있는데, 이를 Mysql에서 사용할 수 있게 변환하려고 합니다.

to_date에 관한 부분은 수정을 했는데... 문제는 ratio_to_report와 partition by입니다. Mysql에는 두 기능이 없다더군요...

어떻게 Mysql에서 Oracle의 ratio_to_report와 partition by의 기능을 하는 SQL문을 작성할 수 있을까요?

SQL문은 다음과 같습니다.

SELECT A.IP, A.RAT/4 + B.RAT
FROM 
	(SELECT IP, CONTINENT, COUNT(*) CNT, RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY IP) RAT
	FROM LOG
	WHERE LOG_TIME BETWEEN STR_TO_DATE('2016/03/01 07:00', '%Y/%m/%d %H:%i') AND STR_TO_DATE('2016/03/02 06:59', '%Y/%m/%d %H:%i')
	GROUP BY IP, CONTINENT
	ORDER BY IP, CONTINENT) AS A,
	(SELECT IP, COUNTRY, COUNT(*) CNT, RATIO_TO_REPORT(COUNT(*)) OVER (PARTITION BY IP) RAT
	FROM LOG
	WHERE LOG_TIME BETWEEN STR_TO_DATE('2016/03/01 07:00', '%Y/%m/%d %H:%i') AND STR_TO_DATE('2016/03/02 06:59', '%Y/%m/%d %H:%i')
	GROUP BY IP, COUNTRY
	ORDER BY IP, COUNTRY) AS B
WHERE A.IP = B.IP
by 마농 [2017.05.24 08:00:58]

ratio_to_report 는 전체 합계 대비 부분합계 비율입니다.
따라서 전체 건수 구하고, 부분건수 구해서 조인하여 결과를 구할 수 있습니다.
그런데 작성하신 쿼리는 좀 이상하네요.
a 집합과 b 집합을 ip 로만 조인하면 카티션곱이 발생할텐데요?
작성하다가 만 구문 말고, 실제로 돌아가던 오라클 구문을 보여주세요.

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