2012-07-08 100 views
1

我想創建一個表像這樣的觀點:MySQL的複雜的嵌套查詢創建視圖

Configuration | Size | Runtime  
0    | 10 | 32.5  
1    | 10 | 30.8 
2    | 10 | 40.1  
0    | 20 | 61.0 
1    | 20 | 65.3 
2    | 20 | 56.8 

如果配置號0是特殊的(這是默認配置),它是 存在於每一組「大小」值。 我的目標是創建這樣的視圖:

Configuration | Size | Speedup 
0    | 10 | 1.0 
1    | 10 | 1.05 
2    | 10 | 0.81 
0    | 20 | 1.0 
1    | 20 | 0.93 
2    | 20 | 1.07 

對於每個組具有相同大小的列我想找到的默認配置(由數字0標識),然後計算的運行時間的比所考慮的行和默認運行時間。

這可以通過兩種查詢劈裂:

  1. 看看對於給定的「大小」
  2. 默認運行時執行運行時,默認的比例。

問題是,在查詢編號1(這應該是查詢2的select語句中的子查詢)我不知道我目前正在考慮哪個「大小」。 我希望你明白我的意思。

我有辦法解決這個問題嗎?

回答

2

你可以用另一種方式是一個子查詢:

CREATE VIEW yourview AS 
SELECT 
    Configuration, 
    Size, 
    (SELECT Runtime 
    FROM yourtable AS T2 
    WHERE T1.Size = T2.Size 
    AND T2.Configuration = 0)/Runtime AS SpeedUp 
FROM yourtable AS T1 

看到它聯機工作:sqlfiddle

+0

酷,謝謝你很多! – 2012-07-08 12:05:36

2
SELECT Configuration, Size, default.Runtime/t.Runtime AS Speedup FROM t JOIN (
    SELECT Size, Runtime FROM t WHERE Configuration = 0 
) `default` USING (Size) 

看到它的sqlfiddle