Создание вида из сложного выбора - PullRequest
1 голос
/ 09 января 2010

У меня довольно сложный запрос, из которого я хотел бы создать представление. Запрос выглядит так:

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, sure, visu, std

Но я хотел бы иметь возможность изменить поля obraz и noisetype для обоих подзапросов. Поэтому после создания такого представления я хотел бы иметь возможность выбирать результаты следующим образом:

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

Как это сделать?

1 Ответ

1 голос
/ 09 января 2010

Мне нужно протестировать его, чтобы получить точный запрос, но основная идея заключается в том, чтобы включить образ и тип шума в ваши запросы на выборку и предложения по группам. Примерно так:

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 для объединения таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...