2010-01-09 69 views
1

我有很复杂的查询,我想创建一个视图。查询如下:从复杂的选择创建视图

select s.avg as c3, fs.bayes, fs.sure, fs.visu, fs.fstd from 
(
SELECT AVG(q.c3), COUNT(q.c3), q.std 
FROM (
     SELECT std, c3, ROW_NUMBER() OVER (PARTITION BY std ORDER BY id) AS rn 
     FROM ssims 
     WHERE obraz = 'peppers2' and noisetype ='L' and data>'2009-12-23' and maska = 9 
     ) q 
WHERE rn <= 15 
GROUP BY 
     std 
     ) s 
,(
SELECT AVG(f.bayes) as bayes, AVG(f.sure) as sure, AVG(f.visu) as visu, COUNT(f.bayes) as fcount, f.std as fstd 
FROM (
     SELECT std, bayes, sure, visu, ROW_NUMBER() OVER (PARTITION BY std ORDER BY id) AS rn 
     FROM falki_ssim 
     WHERE obraz = 'peppers2' and noisetype ='L' 
     ) f 
WHERE rn <= 15 
GROUP BY 
     std 
     ) fs 
where s.std = fs.fstd 

它选择我用指定参数测试的平均结果。此查询的输出返回10行(标准值从5到50与步骤5,所以5,10,15 ...)和5列:c3,bayes,当然,可视,std

但我想以便能够更改两个子查询的obraznoisetype字段。因此,在创建这样的说法后,我希望能够以这种方式选择的结果:

select * from my_view where obraz='peppers2' and noisetype = 'L' 

怎么办呢?

回答

1

我将不得不测试它以获得确切的查询权限,但基本想法是在您的选择查询和您的group by子句中包含obraz和noisetype。类似这样的:

select s.obraz, s.noisetype, s.avg as c3, fs.bayes, fs.sure, fs.visu, fs.fstd from 
(
SELECT obraz, noisetype, AVG(q.c3), COUNT(q.c3), q.std 
FROM (
     SELECT obraz, noisetype, std, c3, ROW_NUMBER() OVER (PARTITION BY obraz, noisetype, std ORDER BY id) AS rn 
     FROM ssims 
     WHERE data>'2009-12-23' and maska = 9 
     ) q 
WHERE rn <= 15 
GROUP BY 
     obraz, noisetype, std 
     ) s 
,(
SELECT obraz, noisetype, AVG(f.bayes) as bayes, AVG(f.sure) as sure, AVG(f.visu) as visu, COUNT(f.bayes) as fcount, f.std as fstd 
FROM (
     SELECT obraz, noisetype, std, bayes, sure, visu, ROW_NUMBER() OVER (PARTITION BY obraz, noisetype, std ORDER BY id) AS rn 
     FROM falki_ssim 
     ) f 
WHERE rn <= 15 
GROUP BY 
     obraz, noisetype, std 
     ) fs 
where s.std = fs.fstd AND s.obraz = fs.obraz AND s.noisetype = fs.noisetype 

您还应该使用JOIN关键字来连接表。

+0

首先,obraz和noisetype必须出现在选择的每个级别。实际上有三种选择。即使纠正后,查询不幸运行,因为我期望(它只选择obraz/noisetype的所有可用 – Gacek 2010-01-09 14:01:02

+0

我发现一个错误的组合:row_number中的分区还需要包括obraz和noisetype。是固定在两个地方 – 2010-01-09 14:11:17

+0

是的,现在它完美的工作,谢谢! – Gacek 2010-01-09 15:00:19