2014-07-10 4 views
0

하위 쿼리를 사용하지 않고 특정 조건과 일치하는 행의 비율을 얻는 방법을 찾고 있습니다.조건과 일치하는 행의 백분율

SELECT 
((SELECT COUNT(*) 
FROM `table1` 
WHERE `date` >= @monthbegin AND `date` <= @monthend AND `isMember` = TRUE)/
(SELECT COUNT(*) 
FROM `table` 
WHERE `date` >= @monthbegin AND `date` <= @monthend) * 100) AS percent_new 

는 기본적으로 N 새로운 행 매달이 있고, 나는 조건 isMember = TRUE에 맞는 새로운 행의 비율을 좀하고 싶습니다 : 현재, 나는있다. 이 작업을 수행하는 데 더 짧은 방법이나 깨끗한 방법이 있습니까?

+0

있습니다 .. 그라는 하위 쿼리를 ... 당신은 기본적으로 있습니다 동일한 두 개의 하위 쿼리를 수행합니다. 하위 쿼리를 사용하지 않는 이유는 무엇입니까? –

답변

1

table1table 실제로이 쿼리보다 빠른 경우이 같은 ... 당신이

SELECT 100*SUM(CASE WHEN `isMember` THEN 1 ELSE 0 END)/COUNT(*) percent_new 
FROM `table1` 
WHERE `date` BETWEEN @monthbegin AND @monthend 

절대적으로 아무 생각하려고하지 수있을 것을 의미하지만, 하위 쿼리를 제거하지 가정하에.

또한 시도 할 수 :

SELECT 100*COUNT(CASE WHEN `isMember` THEN 1 ELSE NULL END)/count(*) percent_new 
FROM `table1` 
WHERE `date` BETWEEN @monthbegin AND @monthend 

을 실제로 길을 BOOLEAN 열을 MySQL 취급을 사용하여 당신이 멀리 얻을 수 있습니다 :

SELECT 100*SUM(`isMember`)/COUNT(*) percent_new 
FROM `table1` 
WHERE `date` BETWEEN @monthbegin AND @monthend 
+0

@JohnRuddell 저는 'BETWEEN'을 사용하는 답변을 업데이트했지만 여분의 괄호는 사용하지 않았습니다. 연산자가 어떤 순서로 호출되는지는 중요하지 않습니다 (수학). – Arth

관련 문제