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

PostgreSQL

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

Две функции-запроса - PostgreSQL

14.12.2016, 03:38. Просмотров 201. Ответов 1
Метки нет (Все метки)

Здравствуйте. У меня есть три таблицы. warship,country,battle, где country таблица-справочник со странами. Все таблицы отображены на скриншотах. В warship содержится больше записей, чем на скрине. Таблица warship связана с таблицей battle по warship.battle_id=battle.id, а с таблицей country по warship.country_id=country.id. Таблица battle связана с country по battle.country_id=country.id.
Я не уже долго не могу написать два запроса:
1. Найти названия сражений, в которых участвовало не менее трех кораблей одной страны
2. Найти все страны, в которых строились и линкоры (battleship), и крейсеры (cruiser)
По первому я пытался сделать функцию. Вот, что получилось:
SQL
1
2
3
4
5
6
7
8
9
10
 CREATE OR REPLACE FUNCTION A_BAD_battle_more_amount_ships(amount_ships INTEGER)
  RETURNS TABLE(dat DATE, b_id battle.id%TYPE, batname text) 
  AS $$
BEGIN
RETURN QUERY
SELECT battle.battle_date, battle.id, TRIM(battle.name)
FROM warship,battle
WHERE battle.id=warship.battle_id AND (SELECT COUNT(*) FROM warship GROUP BY battle_id ORDER BY battle_id)>amount_ships;
END
$$ LANGUAGE plpgsql
Но она не работает, т.к. SELECT COUNT(*) возвращает больше одной строки. Возможно сделать нужно было совсем по-другому.
Миниатюры
Две функции-запроса   Две функции-запроса  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2016, 03:38     Две функции-запроса
Посмотрите здесь:

PostgreSQL Оптимизация запроса при поиске записей в таблицах со связью многие-ко-многим
Как объединить два запроса в один PostgreSQL
PostgreSQL Постгрес оптимизация запроса?
PostgreSQL Создание запроса с частичным содержанием
Ошибка при составлении запроса PostgreSQL
Слить две таблицы в одну, создав новый serial ключ PostgreSQL
PostgreSQL Оптимизация запроса
Как совместить две агрегатные функции в одном запросе PostgreSQL
Нормально ли такое время обработки запроса? PostgreSQL
Postresql зависает при выполнении запроса с order и limit PostgreSQL
Парсер SQL запроса PostgreSQL
PostgreSQL Установить стоимость контрактов, начинающихся после даты, следующей за датой выполнения запроса, в размере, на

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
518 / 459 / 126
Регистрация: 02.09.2012
Сообщений: 1,344
14.12.2016, 11:38     Две функции-запроса #2
1.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
battle_name
FROM
(SELECT
b.name battle_name,
w.country_id, warship_country_id,
COUNT(w.id) warship_count
FROM battle b, warship w, country c
WHERE b.id=w.battle_id AND w.country_id=c.id
GROUP BY b.name, w.country_id) AS d
WHERE 
warship_count>=3;
2.
аналогично, группировать по типам с подсчетом количества типов. у тех у кого это количество =2, значит попадают в результат запроса
Yandex
Объявления
14.12.2016, 11:38     Две функции-запроса
Ответ Создать тему
Опции темы

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