MySQL复杂嵌套查询创建视图

时间:2012-07-08 11:54:10

标签: mysql view nested-query

我想从这样的表创建一个视图:

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. 的默认运行时
  3. 执行运行时和默认值之间的比率。
  4. 问题是在查询号1(应该是查询2的select语句中的子查询)中,我不知道我正在考虑哪个“大小”。 我希望你明白我的意思。

    我有办法摆脱这个问题吗?

2 个答案:

答案 0 :(得分: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上查看。

答案 1 :(得分: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