2011-07-29 3 views
-4

저는 mysql5를 사용하고 있습니다.SQL 요청을 사용하여 백분율을 계산하는 방법

SQL 요청을 사용하여 백분율을 계산하고 싶지만 그렇게 할 수 없습니다.

환경마다 백분율을 계산하고 싶지만 환경에 대한 백분율을 계산하면됩니다.

두 개의 SQL 문을 작성했습니다. 하나는 성공 결과가있는 성공 테스트의 수를 반환하고 두 번째는 성공 테스트의 총 수를 반환합니다.

각각 제대로 작동하지만 동일한 계산서에서 백분율을 계산할 수는 없습니다.

첫 번째 SQL 문 :

SELECT count(result.success), 
     result.RESULT_ENV 
FROM result, 
    scenario, 
    env 
WHERE result.RESULT_ENV = env.ENV_URL 
AND scenario.PHASE_ID = result.RESULT_PHASE 
AND scenario.PHASE_ID = "availibility" 
AND result.TIME BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:12:59' 
AND result.TIME NOT BETWEEN 
    (
     SELECT MW_DB 
     FROM mw 
     WHERE MW_DB BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:12:59' 
    ) AND 
    (
     SELECT MW_DF 
     FROM mw 
     WHERE MW_DB BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:00:55' 
    ) 
AND result.SUCCESS = "ok" 
GROUP BY result.RESULT_ENV 

반환 :

number |  RESULT_ENV 
--------+------------------ 
    6  | http://somip1 
    1  | http://somip2 

두 번째 SQL 문 :

SELECT count(result.success), 
     result.RESULT_ENV 
FROM result, 
    scenario, 
    env 
WHERE result.RESULT_ENV = env.ENV_URL 
AND scenario.PHASE_ID = result.RESULT_PHASE 
AND scenario.PHASE_ID = "availibility" 
AND result.TIME BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:12:59' 
AND result.TIME NOT BETWEEN 
    (
     SELECT MW_DB 
     FROM mw 
     WHERE MW_DB BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:12:59' 
    ) AND 
    (
     SELECT MW_DF 
     FROM mw 
     WHERE MW_DB BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:00:55' 
    ) 
GROUP BY result.RESULT_ENV 

반환 :

number |  RESULT_ENV 
--------+------------------ 
    8  | http://somip1 
    2  | http://somip2 
,

결과는 같아야합니다

percent |  RESULT_ENV 
--------+------------------ 
    75 | http://somip1 
    50 | http://somip2 
+4

혼란스럽게 말로 표현되었지만 완전히 지정되지 않은 질문입니다. 대답 할 수 없습니다. –

답변

0

당신은 그런 CASE statement를 사용해야합니다 :

SELECT (100 * SUM(CASE WHEN result.SUCCESS = 'ok' THEN 1 ELSE 0))/COUNT(result.success), 
     result.RESULT_ENV 
FROM result, 
    scenario, 
    env 
WHERE result.RESULT_ENV = env.ENV_URL 
AND scenario.PHASE_ID = result.RESULT_PHASE 
AND scenario.PHASE_ID = "availibility" 
AND result.TIME BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:12:59' 
AND result.TIME NOT BETWEEN 
    (
     SELECT MW_DB 
     FROM mw 
     WHERE MW_DB BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:12:59' 
    ) AND 
    (
     SELECT MW_DF 
     FROM mw 
     WHERE MW_DB BETWEEN '2011-07-14 12:00:00' AND '2011-07-15 10:00:55' 
    ) 
GROUP BY result.RESULT_ENV 

See the doc :

(100 * SUM(CASE WHEN result.SUCCESS = 'ok' THEN 1 ELSE 0))/COUNT(result.success) 

그런 다음 쿼리가 그런 일해야합니다.

+0

, 고맙습니다. :) – rym

관련 문제