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

PostgreSQL

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

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

14.12.2016, 03:38. Просмотров 226. Ответов 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
Доброго времени суток! Есть следующий запрос: select fio, count(inq_id) as quantity, sys_name from ((employees join systems on...

Составление запроса - объединить две таблицы в одну - MySQL
Всем привет! Подскажите, пожалуйста, как в таблицу одной базы данных добавить данные из идентичной таблицы другой базы данных? ...

Можно ли объединить две одинаковые по полям таблицы в один источник с помощью запроса? - MS Access
Есть 2 таблицы с почти одинаковым набором полей (в одной есть несколько дополнительных, но они, в принципе, не особо нужны). Хочется...

Написать две пользовательские функции, эквивалентные стандартной функции strlen - C++
Написать программу, содержащую две пользовательские функции определения длины строки, эквивалентные стандартной функции strlen. Первая из...

Написать программу, содержащую две функции, сравнения строк, эквивалентные стандартной функции strcmp - C (СИ)
Добрый вечер, многоуважаемые гуру программирования. Прошу помочь написать одну программу, собственно, вот она: "Написать программу,...

Один ПК, две сетевухи, две сетки, две папки для общего доступа - Сети
Здравствуйте! В одном здании имеем две разделенные физически локальные сети. Есть возможность использовать на одном ПК две сетевухи....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grgdvo
552 / 488 / 139
Регистрация: 02.09.2012
Сообщений: 1,434
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, значит попадают в результат запроса
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2016, 11:38
Привет! Вот еще темы с ответами:

Создать любые две таблицы, установить между ними связь, и с помощью запроса показать эту связь - SQL Server
Короче такое задание. Создать любые две таблицы, установить между ними связь и с помощью запроса показать эту связь. Как это сделать?...

Две функции на С++ - C++
Помагите пожалуймста решить функции, при подставлении "р" решались "А" и "А2" :scratch::-[ Буду ооочень благодарен...

Формирование запроса в функции - MS Access
Возможно ли сформировать запрос на выбору программно (в какой-либо функции). Если да, то какой синтаксис запроса?

Соединить две функции - PHP
<script src="http://yastatic.net/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript"> window.onload = function () { ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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