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

Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на - PostgreSQL

Войти
Регистрация
Восстановить пароль
 
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 22
11.11.2016, 21:35     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #1
как можно решить вот такую задачу?
Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на 50% большем суммарной зарплаты экипажа за время аренды.

SQL
1
2
3
UPDATE "Contract" SET "Price" = "Price" + ("Salary")*0.5
FROM "Positions"
WHERE "StartDate" > 'today'
я делаю так а оно мне обновляет на какие-то другие значения(
Миниатюры
Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2016, 21:35     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на
Посмотрите здесь:

Возможен ли доступ к базе данных в момент выполнения backup утилитой pg_dump? PostgreSQL
PostgreSQL Запрос с выбором макс.даты
Получение текущей даты PostgreSQL
PostgreSQL Постгрес оптимизация запроса?
Генерация случайных даты и времени PostgreSQL
PostgreSQL Создание запроса с частичным содержанием
Ошибка при составлении запроса PostgreSQL
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
501 / 442 / 120
Регистрация: 02.09.2012
Сообщений: 1,285
12.11.2016, 02:25     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #2
Вы "Positions" никак не связали с "Contracts". Конечно она будет не так считать.
Если я правильно понял задание, то нужно посчитать сумму зарплаты
SQL
1
2
UPDATE "Contract" c SET "Price" = "Price" + 0.5 * (SELECT SUM("Salary") FROM "Crew" c, "Positions" p WHERE p."YactId" = c."YactId" AND c."PositionId" = p."PositionId")
WHERE "StartDate" > 'today'
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 22
12.11.2016, 19:56  [ТС]     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #3
Добавлено через 20 секунд
grgdvo,
нет, здесь нужно посчитать сумму экипажа каждой яхты в зависимости от того на сколько дней контракт
у меня есть 4 члена экипажа
которые получают
1.Капитан - 10000
2.Боцман - 7000
3.Матрос 1 ранга - 5000
4. Матрос 2 ранга - 3000
на каждой яхте разный экипаж
grgdvo
501 / 442 / 120
Регистрация: 02.09.2012
Сообщений: 1,285
13.11.2016, 07:24     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #4
Забыл что ли умножить на количество дней контракта?!
SQL
1
2
3
4
5
6
UPDATE "Contract" AS ct
  SET ct."Price" = ct."Price" + 
    0.5 * 
    (ct."EndDate" - ct."StartDate") *
    (SELECT SUM("Salary") FROM "Crew" cr, "Positions" ps WHERE cr."YactId" = ct."YactId" AND cr."PositionId" = ps."PositionId")
  WHERE "StartDate" > 'today';
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 22
13.11.2016, 14:49  [ТС]     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #5
grgdvo,
я вот делаю так но оно выводит мне
подзапрос вернул больше одной строки
UPDATE "Contract"
SQL
1
2
3
4
5
6
7
8
9
SET "Price" = "Price" + 
    (0.5 * 
    ("EndDate" - "StartDate")) *
    
    ((SELECT SUM (p."Salary")
      FROM "Yacht" AS y , "Crew" AS c, "Positions" AS  p
      WHERE y."YachtId" = c."YachtId" AND c."PositionId" = p."PositionId"
      GROUP BY  y."Name"))
  WHERE "StartDate" > 'today';
Добавлено через 6 минут
grgdvo,
я вот делаю так но оно выводит мне
подзапрос вернул больше одной строки

SQL
1
2
3
4
5
6
7
8
9
UPDATE "Contract" SET "Price" = "Price" + 
    (0.5 * 
    ("EndDate" - "StartDate")) *
    
    ((SELECT SUM (p."Salary")
      FROM "Yacht" AS y , "Crew" AS c, "Positions" AS  p
      WHERE y."YachtId" = c."YachtId" AND c."PositionId" = p."PositionId"
      GROUP BY  y."Name"))
  WHERE "StartDate" > 'today';
grgdvo
501 / 442 / 120
Регистрация: 02.09.2012
Сообщений: 1,285
13.11.2016, 16:44     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #6
В данном виде подзапрос возвращает у вас суммы зарплаты по всем судам.
Логично, что это больше одного. В результате ошибка.

Зачем "Yacht" вподзапросе??? У вас уже в "Contracts" есть идентификатор судна.
Свяжите подзапрос с "Contracts"."YactID"
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 22
13.11.2016, 16:51  [ТС]     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #7
grgdvo,
Когда я делаю вот так
SQL
1
2
3
4
5
6
7
8
9
10
11
UPDATE "Contract" AS ct
 
  SET ct."Price" = ct."Price" + 
    0.5 * 
    (ct."EndDate" - ct."StartDate") *
    
    (SELECT SUM("Salary") 
    FROM "Crew" cr, "Positions" ps 
    WHERE cr."YachtId" = ct."YachtId" AND cr."PositionId" = ps."PositionId")
    
  WHERE "StartDate" > 'today';
оно мне выводит вот это(
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 22
13.11.2016, 16:52  [ТС]     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #8
grgdvo,
Миниатюры
Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на  
Trigger_name
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 22
13.11.2016, 17:13  [ТС]     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #9
grgdvo, у меня у каждой яхты разное количество экипажа!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2016, 18:15     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на
Еще ссылки по теме:

PostgreSQL Оптимизация запроса
PostgreSQL Запрос даты и времени с разных полей
PostgreSQL Результат выполнения CREATE TABLE
Парсер SQL запроса PostgreSQL
PostgreSQL Две функции-запроса

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

Или воспользуйтесь поиском по форуму:
grgdvo
501 / 442 / 120
Регистрация: 02.09.2012
Сообщений: 1,285
13.11.2016, 18:15     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Упс.... В SET имя колонки без ссылки на таблицу должно использоваться

SQL
1
2
3
4
5
6
7
8
UPDATE "Contract" AS ct
  SET "Price" = ct."Price" + 
    0.5 * 
    (ct."EndDate" - ct."StartDate") *
    (SELECT SUM("Salary") 
    FROM "Crew" cr, "Positions" ps 
    WHERE cr."YachtId" = ct."YachtId" AND cr."PositionId" = ps."PositionId")
  WHERE "StartDate" > 'today';
Yandex
Объявления
13.11.2016, 18:15     Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на
Ответ Создать тему
Опции темы

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