2013-06-18 2 views
0

다음 필드가있는 MySQL 테이블이 있습니다. 날짜, block_no, 엔터티, 읽기이 MySQL 쿼리를 더 간단하게 만들 수 있습니까?

이제이 SQL을 실행하고 결과를 가져오고 있습니다.

SELECT DATE,block_no, 
SUM(IF(entity='KS',READING,0)) AS KS, 
SUM(IF(entity='KB',READING,0)) AS KB, 
SUM(IF(entity='V1',READING,0)) AS V1, 
(SUM(IF(entity='KS',READING,0)) + SUM(IF(entity='KB',READING,0)))/SUM(IF(entity='V1',READING,0)) AS "New Rate" 
FROM dbf_sdl 
GROUP BY DATE,block_no; 

이 세 가지 엔티티와 계산 필드 간단한 쿼리,하지만 난 15 개 기업 및이를 사용하여 일부 계산 된 필드 개까지 포함 쿼리를 작성해야합니다. 이 쿼리를 더 단순화 할 수있는 방법이 있습니까? 사용할 수없는 것처럼 필드 별칭을 계산할 수 없습니다.

(KS+KB)/V1 AS "New Rate" 

친절히 제안합니다. 감사

답변

7

열 별칭은 같은 SELECT 문에서 사용할 수 없습니다,하지만 당신은 다음 계산을 다시하지 않으려면 하위 쿼리 사용할 수 있습니다

select DATE,block_no, KS, KB, V1, 
    (KS+KB)/V1 AS "New Rate" 
from 
(
    SELECT DATE,block_no, 
    SUM(IF(entity='KS',READING,0)) AS KS, 
    SUM(IF(entity='KB',READING,0)) AS KB, 
    SUM(IF(entity='V1',READING,0)) AS V1 
    FROM dbf_sdl 
    GROUP BY DATE,block_no 
) d 
2

당신은 하위 쿼리에서 집계 할 수 있습니다 SUM() 반복을 피하기 위해 :

SELECT *,(KS+KB)/V1 AS "New Rate" 
FROM (SELECT DATE,block_no, 
     SUM(IF(entity='KS',READING,0)) AS KS, 
     SUM(IF(entity='KB',READING,0)) AS KB, 
     SUM(IF(entity='V1',READING,0)) AS V1, 
     FROM dbf_sdl 
     GROUP BY DATE,block_no 
    )as Sub; 
+0

감사합니다 .... 정말 도움이 ... –

관련 문제