2014-02-20 16 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,如果我可以! 也許它的確如此 - 它花費了0.2秒的時間(使用SQL_NO_CACHE避免緩存與我混淆。) – zephithon

相關問題