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

PostgreSQL

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

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

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

Оптимизация запроса - PostgreSQL
Здравствуйте. Есть вот такой запрос. -- здесь можно создавать индексы, если угодно -- CREATE INDEX idx1 ON Commander(name); --...

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

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

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

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

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

Необходимы две функции - Дискретная математика
Первая - каждому натуральному числу ставит в соответствие два индекса, вторая - по двум числам(индексам) определяет натуральное число....

TChart, две функции - Delphi
Как реализовать, чтобы в TСhart при запуске программы строился один график, а при нажатии на button1 рисовался еще один. Если со вторым все...

Две задачи (функции) - Visual C++
Помогите решить пожалуйста две задачи. 1.Для каждой введенной цифры (0-9) вывести соответствующее ей название на английском языке (0 -...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
537 / 478 / 137
Регистрация: 02.09.2012
Сообщений: 1,398
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     Две функции-запроса
Ответ Создать тему
Опции темы

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