여기서 말하고자 하는 것은 엄밀하게 말해서, 일반적으로 수학에서 말하는
분포함수(distribution function)와는 다르다.
여기서 말하고자 하는 것은, SQL 튜닝에서 중요한 통계나 히스토그램과 관련된
데이터 값들의 분포를 말한다.
즉, 간단히 말해서 어떤 값을 갖는 데이터가 몇건 존재하는가의 여부이다.
이 게시판에도 언급되어 있는 self-counting sequence 를 예를 들어 살펴보자.
(아래 페이지 참고)
http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=73
이 수열은 다음과 같이 증가한다.
1, 2,2, 3,3,3, 4,4,4,4, 5,5,5,5,5, ...
이 수열을 1000 항까지 구하는 쿼리는 아래와 같다.
SELECT TRUNC (1 / 2 + SQRT (2 * LEVEL)) level#
FROM DUAL
CONNECT BY LEVEL <= 1000
자, 그렇다면 이 쿼리의 결과에서 데이터 값들은 어떻게 분포하는가?
간단히 아래 쿼리를 실행해 보면 되겠다.
즉, 각 데이터 값들이 몇건 존재하는가 이다.
SELECT level#
, LPAD ('*', COUNT (*), '*')
FROM (SELECT TRUNC (1 / 2 + SQRT (2 * LEVEL)) level#
FROM DUAL
CONNECT BY LEVEL <= 1000)
GROUP BY level#
위의 쿼리를 실행하면 결과는 아래와 같다.
LEVEL# LPAD('*',COUNT(*),'*')
------ ----------------------
1 *
2 **
3 ***
4 ****
5 *****
6 ******
7 *******
8 ********
9 *********
10 **********
11 ***********
12 ************
13 *************
14 **************
15 ***************
16 ****************
17 *****************
18 ******************
19 *******************
20 ********************
...
...
...
어떤가? 그래프의 모습이 나타나는가?
그렇다. 우리가 많이 보아온 분포 f(x) = x 의 분포이다.
재미있지 않은가?
그렇다면, 우리가 말하는 분포함수가 위와 같은 것을 의미한다고 할때,
분포함수 f(x) = sin(x)를 생성하는 쿼리를 어떻게 찾을 것인가?
이것은 여러분에게 제출하는 퀴즈이다.
모두 풀어보고, 아래에 본인이 발견한 쿼리와 비교해 보길 바란다.
(sine 함수의 주기나 진폭은 어떤것이어도 좋다.
다만 sine함수의 형태로 나오기만 하면 되겠다.)
그리고 이러한 분포함수를 생성하는 쿼리를 찾는 일반적인 방법에 관해서,
시간이 나는대로 정리해서 올리도록 하겠다.
아래에서 본인의 쿼리를 확인하자.
SELECT level#
, LPAD ('*', COUNT (*), '*')
FROM (SELECT CEIL (ACOS ((LEVEL - 500) / 500) * 10) level#
FROM DUAL
CONNECT BY LEVEL <= 1000)
GROUP BY level#
LEVEL# LPAD('*',COUNT(*),'*')
------ ----------------------------------------------------
0 *
1 **
2 *******
3 *************
4 *****************
5 **********************
6 **************************
7 ******************************
8 **********************************
9 **************************************
10 ****************************************
11 ********************************************
12 *********************************************
13 ************************************************
14 *************************************************
15 *************************************************
16 **************************************************
17 **************************************************
18 *************************************************
19 ************************************************
20 ***********************************************
21 ********************************************
22 ******************************************
23 ***************************************
24 ***********************************
25 ********************************
26 ****************************
27 ************************
28 *******************
29 **************
30 *********
31 *****
어떤가? sine 함수의 모습이 보이는가?