MySQL复杂嵌套查询创建视图

Posted

技术标签:

【中文标题】MySQL复杂嵌套查询创建视图【英文标题】:MySQL complex nested query creating a view 【发布时间】:2012-07-08 03:17:12 【问题描述】:

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

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 的 select 语句中的子查询)我不知道我目前正在考虑哪个“大小”。 我希望你明白我的意思。

我有办法解决这个问题吗?

【问题讨论】:

【参考方案1】:

您可以使用的另一种方法是子选择:

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

【讨论】:

【参考方案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 上查看。

【讨论】:

以上是关于MySQL复杂嵌套查询创建视图的主要内容,如果未能解决你的问题,请参考以下文章

mysql 视图

MySQL数据库高阶语句之查询视图NULL值

以可使用 Impala 查询的方式在包含复杂类型的配置单元表上创建日期限制视图?

mysql-视图及索引简介

从复杂查询中定义 mysql 中的视图 - 尝试 #2

Mysql视图