Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 27
#1

Как использовать локальное представления? - PostgreSQL

22.11.2016, 21:33. Просмотров 350. Ответов 9
Метки нет (Все метки)

Получить информацию о яхтах, приносящих максимальный средний доход своим владельцам (воспользоваться «локальным» представлением).

решаю задачу таким образом, но не могу въехать как получить максимальный средний доход, и при этом пользоватся локальным представлениям(

SQL
1
2
3
4
5
CREATE VIEW "OwnerView" AS
SELECT o."FullName",COUNT (y."OwnerId"), AVG (c."Price") , MAX (c."Price")
FROM "Owner" AS o, "Yacht" AS y, "Contract" AS c
WHERE o."OwnerId" = y."OwnerId" AND y."YachtId" = c."YachtId"
GROUP BY  o."FullName"
Миниатюры
Как использовать локальное представления?  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2016, 21:33     Как использовать локальное представления?
Посмотрите здесь:

Как использовать параметр в функции? - PostgreSQL
Добрый день столкнулся с такой задачей( Составить хранимую процедуру для реализации факта аренды яхты и отображения контракта в виде...

Как использовать битовую маску в Postgres - PostgreSQL
Хотелось бы в поле писать несколько параметров. Например 10 - это 1- виден 0 - включен. Т.е. это можно записать в десятичной форме как 2 ...

Как правильно использовать функцию RANK для подсчитываемых полей - PostgreSQL
Здравствуйте. Само задание звучит так: Для каждого района показать его ранг (место) в списках ранжирования по: – количеству...

Как получить нужные данные из представления , а именно строки представления - C++ Qt
Доброго времени суток. на главной форме у меня информация выводится через представление zews... информация в него попадает если запись...

Какой класс использовать для представления времени - C#
Мне нужно расписание сделать. Можно ,конечно, через дабл 13.30 , но как-то не по госту, наверное. Стринг ругается , если я вписываю 13:30,...

Какой компонент использовать для представления табличных данных - Visual Basic .NET
Народ, не могу понять как сделать таблицу такую же как в диспетчере задач во вкладке процессы (Ctrl+alt+del | ctrl+shift+esc), и чтобы...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 27
23.11.2016, 12:01  [ТС]     Как использовать локальное представления? #2
все, вроде бы решил)
SQL
1
2
3
4
5
CREATE VIEW "Max_Salary" AS
SELECT o."FullName",  ROW_NUMBER() OVER (ORDER BY AVG (c."Price") , MAX (c."Price")) 
FROM "Owner" AS o, "Yacht" AS y, "Contract" AS c
WHERE o."OwnerId" = y."OwnerId" AND y."YachtId" = c."YachtId"
GROUP BY  o."FullName"
grgdvo
539 / 480 / 137
Регистрация: 02.09.2012
Сообщений: 1,398
23.11.2016, 15:14     Как использовать локальное представления? #3
Не то чтобы меня это волнует, но мне кажется, что запрос не соответствует заданию.
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 27
23.11.2016, 15:16  [ТС]     Как использовать локальное представления? #4
grgdvo, а как его можно сделать по другому?
grgdvo
539 / 480 / 137
Регистрация: 02.09.2012
Сообщений: 1,398
23.11.2016, 16:07     Как использовать локальное представления? #5
если бы я сдавал, я бы сделал так

делаем представление о среднем доходе каждой яхты (не знаю, почему у вас его называют "локальным").
средний доход - это сумма всех контрактов яхты, разделенное на количество контрактов этой яхты.
SQL
1
2
3
4
CREATE VIEW "YachtDohod" AS
SELECT c."YachtId", SUM(c."Price") / COUNT(c."YachtId") AS "Dohod"
FROM "Contract" AS c
GROUP BY c."YachtId";
Далее подсчитываем максимальный средний доход и отбираем яхты только с максимальным доходом
SQL
1
2
3
4
5
6
SELECT "OwnerId", "YachtId", "Name", "Dohod"
FROM
(SELECT y."OwnerId", y."YachtId", y."Name", yd."Dohod", MAX(yd."Dohod") OVER (PARTITION BY "OwnerId") AS "MaxDohod"
FROM "Yacht" AS y, "YachtDohod" AS yd
WHERE y."YachtId" = yd."YachtId") subquery
WHERE "Dohod" = "MaxDohod";
Вроде так

Добавлено через 2 минуты
ооо!!... ну и в представлении "YachtDohod" конечно можно SUM / COUNT заменить на AVG(c."Price").
это я слишком углубился в написание запроса
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 27
23.11.2016, 21:41  [ТС]     Как использовать локальное представления? #6
так это же два запроса, а нужно одним сделать)

Добавлено через 32 минуты
и еще оно чет не работает
grgdvo
539 / 480 / 137
Регистрация: 02.09.2012
Сообщений: 1,398
23.11.2016, 23:53     Как использовать локальное представления? #7
Цитата Сообщение от Trigger_name Посмотреть сообщение
и еще оно чет не работает
ошибку пишет?? или не те данные считает??

Цитата Сообщение от Trigger_name Посмотреть сообщение
так это же два запроса
вам не угодишь... а все же... что такое "локальное" представление??

SQL
1
2
3
4
5
6
7
8
9
10
WITH "YachtDohod" ("YachtId", "Dohod") AS
(SELECT c."YachtId", AVG(c."Price")  AS "Dohod"
FROM "Contract" AS c
GROUP BY c."YachtId")
SELECT "OwnerId", "YachtId", "Name", "Dohod"
FROM
(SELECT y."OwnerId", y."YachtId", y."Name", yd."Dohod", MAX(yd."Dohod") OVER (PARTITION BY "OwnerId") AS "MaxDohod"
FROM "Yacht" AS y, "YachtDohod" AS yd
WHERE y."YachtId" = yd."YachtId") subquery
WHERE "Dohod" = "MaxDohod";
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 27
25.11.2016, 21:55  [ТС]     Как использовать локальное представления? #8
grgdvo, локальное представления это когда во FROM используют SELECT.
У меня вопрос этот запрос возвращает только среднее арифметическое контрактов каждой яхты.
SQL
1
2
3
4
5
6
7
8
9
10
WITH "YachtDohod" ("YachtId", "Dohod") AS
(SELECT c."YachtId", AVG(c."Price")  AS "Dohod"
FROM "Contract" AS c
GROUP BY c."YachtId")
SELECT "OwnerId", "YachtId", "Name", "Dohod"
FROM
(SELECT y."OwnerId", y."YachtId", y."Name", yd."Dohod", MAX(yd."Dohod") OVER (PARTITION BY "OwnerId") AS "MaxDohod"
FROM "Yacht" AS y, "YachtDohod" AS yd
WHERE y."YachtId" = yd."YachtId") subquery
WHERE "Dohod" = "MaxDohod";
Как я понял здесь нужно сначала посчитать среднее арифметическое контракта каждой яхты, а потом вывести какой из контрактов каждой яхты есть самым большим.
Но как это сделать я не могу понять.
grgdvo
539 / 480 / 137
Регистрация: 02.09.2012
Сообщений: 1,398
26.11.2016, 00:31     Как использовать локальное представления? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Trigger_name Посмотреть сообщение
У меня вопрос этот запрос возвращает только среднее арифметическое контрактов каждой яхты.
Нет, возвращает максимальное среднее по каждой яхте

Цитата Сообщение от Trigger_name Посмотреть сообщение
Но как это сделать я не могу понять.
Подставьте вместо "YachtDohod" запрос из WITH

SQL
1
2
3
4
5
6
7
SELECT "OwnerId", "YachtId", "Name", "Dohod"
FROM
  (SELECT y."OwnerId", y."YachtId", y."Name", yd."Dohod", MAX(yd."Dohod") OVER (PARTITION BY "OwnerId") AS "MaxDohod"
  FROM "Yacht" AS y, 
           (SELECT c."YachtId", AVG(c."Price")  AS "Dohod" FROM "Contract" AS c GROUP BY c."YachtId") AS yd
  WHERE y."YachtId" = yd."YachtId") subquery
WHERE "Dohod" = "MaxDohod";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2016, 22:46     Как использовать локальное представления?
Еще ссылки по теме:

Что лучше использовать для представления простых табличных данных - C#
хочу написать программу в которую будут добавляться наименования типа код, название, цена и т.п. и можно будет осуществлять поиск по...

как создать локальное соединение - Сети
как создать локальное соединение подскажите пж, как правильно настроить сеть а именно IPадреса для сдачи теста в школе. автоматический...

Как настроить локальное ADO подключение к БД Paradox? - C++ Builder БД
как настроить локальное ADO подключение к БД Paradox? разместил на форму ADODataSet и ADOQuery(не знаю может ещё ADOConnection надо) что...

Как установить локальное время для поля timestamp - PHP БД
mysql_query("SET time_zone = '+03:00'"); для поле с time работает отлично, для поля timestamp при добавлении записи вставляется время ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 27
01.12.2016, 22:46  [ТС]     Как использовать локальное представления? #10
grgdvo, спасибо)
Yandex
Объявления
01.12.2016, 22:46     Как использовать локальное представления?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru