2014-02-20 3 views
1

아마도이 방법을 올바르게 검색하는 방법을 모르거나이 기술에 이름이 올지 모르지만 나는 무엇을 하려는지 생각해 봅니다. 해야 할 일은 상대적으로 간단해야하며, 전에 한 번도 해보지 않았습니다.1 열의 결과를 다른 열의 일부로 사용하는 방법

select 
sum(miles) as totalMiles 
,sum(events) as events 
,round(sum(events)/(sum(miles)/1000),1) as events_per1k 
from ... 

그래서, 당신은 내가 이미 그 자리에있어 totalMiles 및 이벤트를했습니다 것을 볼 수 있습니다, 그리고 3 열 값을 계산하기 위해 다시 요약 할 수있다.

sum(miles)sum(events)을 다시 사용하지 않고도 세 번째 열 값을 얻을 수있는 방법이 있습니까? 이게 뭔가요?

select 
sum(miles) as totalMiles 
,sum(events) as events 
,round((val:col2)/((val:col1)/1000),1) as events_per1k 
from ... 

답변

1

당신은 SELECT에서 직접 참조 할 수 없습니다,하지만 당신은 하위 쿼리에서 그들을 포장 수 :

SELECT 
    ROUND(i.events/(i.totalMiles/1000), 1) as events_perlk 
FROM (
    SELECT 
     sum(miles) as totalMiles, 
     sum(events) as events 
    FROM 
    ... 
) i; 

이보다 더 성능이 좋은 해결책이 될 수 있지만이 간단하고 것 그 일을해라.

SQLFiddle : http://sqlfiddle.com/#!2/b086d8/2

+0

이것은, 내가 서브 쿼리를 사용하여 생각하지 않았다, 그러나 이것은 내가 갈거야 무엇 인 전체 성능에 영향을주지 않습니다 아주 좋은 답변입니다 (스키마에서 추측) 에 대한. 이 쿼리에서 행의 길이는 2.5M 행 입니다. 내가 할 수 있으면 나는 upvote 것입니다! 아마도 그럴 수 있습니다. - 캐시 시간을 줄이기 위해 SQL_NO_CACHE를 사용합니다. – zephithon

관련 문제