Упражнение 70 стр. 1
Укажите сражения, в которых участвовало, по меньшей мере, три корабля одной и той же страны.
Консоль
Выполнить
Можно назвать этот запрос «первым приближением» к решению. Соединяются все необходимые таблицы через предложение WHERE , в результате чего определяется битва и страна (из таблицы Classes) для кораблей из таблицы Outcomes. Далее выполняется группировка по стране и сражению с последующим отбором по числу кораблей.
Ошибочным здесь является то, что мы никак не учитываем корабли, отсутствующие в таблице Ships, так как используются внутренние соединения. Читатель уже, наверное, вник в используемую схему и понимает, что здесь нет учитываются головные корабли, класс которых может быть определен не только через таблицу Ships, но и непосредственно с помощью таблицы Classes, а, следовательно, может быть определена и владеющая кораблем страна. Теперь рассмотрим решения, в которых была сделана попытка учесть эту особенность схемы данных.
| Страницы: | 1 | 2 | 3 | 4 |
Упражнения по SQL
SELECT (обучающий этап) задачи по SQL запросам 120 штук, DML 10 шт. Дистанционное обучение языку баз данных SQL. Интерактивные упражнения и тестирование по операторам SELECT,INSERT,UPDATE,DELETE языка SQL. SQL remote education. SQL statements exercises. Подзапросы, Соединение таблиц, Функции SQL, Введение в SQL, Скачать книги по SQL. Команды SQL,CREATE SEQUENCE,CREATE SYNONYM,CREATE USER,CREATE VIEW,Create Table,DROP,GRANT,INSERT,REVOKE,SET ROLE,SET TRANSACTION,SQL ALTER TABLE,SQL команды.
пятница, 17 апреля 2020 г.
Укажите сражения, в которых участвовало по меньшей мере три корабля одной и той же страны.
Задание: 70 (Serge I: 2003-02-14)
Укажите сражения, в которых участвовало по меньшей мере три корабля одной и той же страны.
SELECT DISTINCT o.battle
FROM outcomes o
LEFT JOIN ships s ON s.name = o.ship
LEFT JOIN classes c ON o.ship = c.class OR s.class = c.class
WHERE c.country IS NOT NULL
GROUP BY c.country, o.battle
HAVING COUNT(o.ship) >= 3
Популярные сообщения
- SELECT (обучающий этап) задачи по SQL запросам
- Найдите номера моделей и цены всех продуктов (любого типа), выпущенных производителем B (латинская буква).
- Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price
- Найдите пары моделей PC, имеющих одинаковые скорость и RAM.
- Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.
- Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных.
- Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.
- Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM.
- В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.
- Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes). SELECT c
Команда SELECT
- SQL Подзапросы
- SQL Соединение таблиц
- SQL Строки и выражения
- Команда SELECT Раздел FROM
- Команда SELECT Раздел GROUP BY
- Команда SELECT Раздел HAVING
- Команда SELECT Раздел ORDER BY
- Команда SELECT Раздел WHERE
Команды SQL
Условия в SQL
Функции SQL
Основа SQL
- Введение в SQL
- Индексы ROWID в Oracle
- Типы данных SQL
- Типы привилегий
Меню SQL
Ссылки
Примеры
Архив блога
- ▼2020 (121)
- ▼апреля (121)
- Для авиакомпаний, самолеты которой выполнили хотя .
- Сгруппировать все окраски по дням, месяцам и годам.
- Выборы Директора музея ПФАН проводятся только в ви.
- Задание: 117 (Serge I: 2013-11-29) По таблице Cla.
- Считая, что каждая окраска длится ровно секунду, о.
- Рассмотрим равнобочные трапеции, в каждую из котор.
- Определить имена разных пассажиров, которым чаще д.
- Сколько каждой краски понадобится, чтобы докрасить.
- Какое максимальное количество черных квадратов мож.
- Найти НЕ белые и НЕ черные квадраты, которые окраш.
- Определить имена разных пассажиров, когда-либо лет.
- Вывести: 1. Названия всех квадратов черного или б.
- Реставрация экспонатов секции «Треугольники» музея.
- Для пятого по счету пассажира из числа вылетевших .
- Пусть v1, v2, v3, v4, . представляет последовате.
- Статистики Алиса, Белла, Вика и Галина нумеруют ст.
- Для каждого класса крейсеров, число орудий которог.
- Выбрать три наименьших и три наибольших номера рей.
- Определить имена разных пассажиров, которые летали.
- Таблица Printer сортируется по возрастанию поля code.
- Написать запрос, который выводит все операции прих.
- Рассматриваются только таблицы Income_o и Outcome_.
- Вывести список ПК, для каждого из которых результа.
- Отобрать из таблицы Laptop те строки, для которых .
- При условии, что баллончики с красной краской испо.
- На основании информации из таблицы Pass_in_Trip, д.
- Для семи последовательных дней, начиная от минимал.
- Для каждой компании, перевозившей пассажиров, подс.
- Выбрать все белые квадраты, которые окрашивались т.
- Используя таблицу Product, определить количество п.
- Вывести все строки из таблицы Product, кроме трех .
- Найти производителей, у которых больше всего модел.
- Среди тех, кто пользуется услугами только одной ко.
- Считая, что пункт самого первого вылета пассажира .
- Для каждого производителя перечислить в алфавитном.
- Найти производителей, которые выпускают только при.
- Для каждой компании подсчитать количество перевезе.
- Определить названия всех кораблей из таблицы Ships.
- В наборе записей из таблицы PC, отсортированном по.
- Из таблицы Outcome получить все записи за тот меся.
- Найти производителей компьютерной техники, у котор.
- Определить пассажиров, которые больше других време.
- Для каждого сражения определить первый и последний.
- Определить дни, когда было выполнено максимальное .
- Определить время, проведенное в полетах, для пасса.
- Для каждого корабля из таблицы Ships указать назва.
- Вывести классы всех кораблей России (Russia). Если.
- Для каждой страны определить сражения, в которых н.
- Среди тех, кто пользуется услугами только какой-ни.
- Найти тех производителей ПК, все модели ПК которых.
- Укажите сражения, в которых участвовало по меньшей.
- По таблицам Income и Outcome для каждого пункта пр.
- Найти количество маршрутов, которые обслуживаются .
- Найти количество маршрутов, которые обслуживаются .
- Для всех дней в интервале с 01/04/2003 по 07/04/20.
- Пронумеровать уникальные пары из Pro.
- Используя таблицы Income и Outcome, для каждого пу.
- Определить имена разных пассажиров, когда-либо лет.
- Посчитать остаток денежных средств на всех пунктах.
- Посчитать остаток денежных средств на всех пунктах.
- Посчитать остаток денежных средств на начало дня 1.
- Посчитать остаток денежных средств на каждом пункт.
- Для каждого типа продукции и каждого производителя.
- Для классов, имеющих потери в виде потопленных кор.
- Для каждого класса определите число кораблей этого.
- Для каждого класса определите год, когда был спуще.
- С точностью до 2-х десятичных знаков определите ср.
- Определите среднее число орудий для классов линейн.
- Определить названия всех кораблей из таблицы Ships.
- Найдите названия кораблей, имеющих наибольшее числ.
- Найдите сражения, в которых участвовали корабли кл.
- Найдите названия кораблей с орудиями калибра 16 дю.
- Найдите классы кораблей, в которых хотя бы один ко.
- Пронумеровать строки из таблицы Product в следующе.
- Для каждого корабля, участвовавшего в сражении при.
- Найдите названия всех кораблей в базе данных, сост.
- Найдите названия всех кораблей в базе данных, начи.
- Укажите сражения, которые произошли в годы, не сов.
- Найдите названия кораблей, потопленных в сражениях.
- Для ПК с максимальным кодом из таблицы PC вывести .
- Найдите класс, имя и страну для кораблей из таблиц.
- Найдите класс, имя и страну для кораблей из таблиц.
- Найдите корабли, «сохранившиеся для будущих сражен.
- Найдите страны, имевшие когда-либо классы обычных .
- Найдите классы, в которые входит только один кораб.
- Перечислите названия головных кораблей, имеющихся .
- В таблице Product найти модели, которые состоят то.
- По Вашингтонскому международному договору от начал.
- Укажите корабли, потопленные в сражениях в Северно.
- Одной из характеристик корабля является половина к.
- Для классов кораблей, калибр орудий которых не мен.
- В предположении, что приход и расход денег на кажд.
- В предположении, что приход и расход денег на кажд.
- Найдите средний размер диска ПК (одно значение для.
- Найдите средний размер диска ПК каждого из тех про.
- Найдите среднюю цену ПК и ПК-блокнотов, выпущенных.
- Найдите производителей принтеров, которые производ.
- Перечислите номера моделей любых типов, имеющих са.
- Найдите производителей, которые производили бы как.
- Для каждого значения скорости ПК, превышающего 600.
- ►2019 (130)
- ►апреля (18)
- ►марта (2)
- ►февраля (22)
- ►января (88)
- ►2018 (2)
- ►декабря (2)
- ►2017 (22)
- ►февраля (22)
- 12 идей
- 21 ошибка программиста PHP
- Абстрактные классы БД
- Азбука MySQL
- База данных Компьютерная фирма
- база sql server
- Безопасный и удобный поиск в mySQL
- Введение в SQL
- Введение в SQLite
- Вложенные запросы SQL
- Внешние объединения SQL
- Время выполнения SQL запросов
- Вступление в PHP и MySQL
- господа!
- Задания для самостоятельной работы
- Знакомство с WinBinder
- Индексы ROWID в Oracle
- Интервью Расмуса Лердорфа для SitePoint
- Использование в запросе нескольких источников записей
- Использование ключевых слов SOME | ANY и ALL с предикатами сравнения
- Использование mysqli
- Использование PEAR для доступа к базе данных
- Как вывести по N строк из каждой группы?
- Как выводить в запросе все столбцы кроме одного
- Как добавить новый столбец в таблицу между существующими столбцами?
- Как объединить данные из двух столбцов в один без использования UNION и JOIN?
- Как подсчитать накопительный итог?
- как получать пассивный доход
- Как решать задачи на SQL
- Как удалить дубликаты строк из таблицы?
- Как удалить дубликаты строк при наличии первичного ключа?
- Как установить шрифт в Windows и macOS
- Код ошибки: 1062. Дублируемая запись ‘PRIMARY’
- Команда SELECT Раздел FROM
- Команда SELECT Раздел GROUP BY
- Команда SELECT Раздел HAVING
- Команда SELECT Раздел ORDER BY
- Команда SELECT Раздел WHERE
- Команды DML
- Конвертация баз MySQL в dBase
- Конвертация базы данных из DBASE в MySQL
- которые должен знать каждый программист
- Краткое вступление в SQLite
- Ловля ошибки в PHP
- не перечисляя их?
- Обработка запросов к БД при помощи PEAR::XML
- Оператор выбора SELECT
- Оператор SELECT
- Оператор UPDATE
- Операторы манипулирования данными SQL
- Операторы модификации данных
- Оптимальное использование MySQL
- Оптимизация запросов в MySQL
- Оптимизация программ на PHP
- Оптимизация работы с MySQL
- Основные команды SQL
- Основы SQL на примере задачи
- Основы SQL на примере задачи и Решение
- ОШИБКА 1044 (42000): доступ запрещен для пользователя ‘@’ localhost ‘в базу данных’ db ‘
- Ошибка 1067 при попытке запустить MySQL
- Переименование столбцов и вычисления в результирующем наборе
- Пишем PHP код
- Получение итоговых значений
- Постреляционная СУБД Postgres95
- Построение таблиц «Один-к-разным»
- Предикаты (часть I)
- Преобразование типов
- Приложение 1. Описание учебных баз данных
- Применение агрегатных функций и вложенных запросов в операторе выбора
- Проектирование Интернет-приложений
- Работа с базами данных. Начало
- Работа с БД. Анализ логов
- Работа с MySQL
- Работа с MySQL: Подробнее
- Работа с MySQL. Деревья
- Работа с MySQL. Новостная лента для странички
- Работа с NULL-значениями
- Работа с Oracle в PHP
- Работа с SQLite
- Разбиваем большие запросы на страницы
- Рекурсивные SQL запросы
- Связи таблиц в MySQL
- Скачать книги по SQL
- Структура SQL
- Структурированный язык запросов SQL
- Тест знаний SQL — Основы
- Типы данных SQL
- Типы данных SQL /89
- Типы привилегий
- Тонкая настройка MySQL
- Традиционные операции над множествами и оператор SELECT
- устойчивый к ошибкам
- Функции работы со строками в MS SQL SERVER 2005
- Функции Transact-SQL для обработки даты/времени
- Функция SQL FIRST ()
- Хороший стиль программирования
- Хранение древовидных структур в Базах данных
- часть 1
- язык sql
- Як встановити або видалити шрифт у Windows
- Active Directory Sync
- ADODB – русская документация
- CHECK
- CREATE SEQUENCE
- CREATE SYNONYM
- Create Table
- CREATE USER
- CREATE VIEW
- DML
- DROP
- FOREIGN KEY
- GRANT
- INSERT
- ms sql
- MySQL для начинающих
- MySQL и оптимизация
- MySQL Administrator
- MySQL error 1045
- MySQL error 1054 и как с ней бороться
- MySQL error 1064
- MySQL error 1093 и 1235
- MySQL. Установка. Настройка. Использование
- Oracle и PHP — это очень просто!
- PHP против ASP — В примерах
- PostgreSQL 8.3.0
- PostgreSQL версии 8.0
- PRIMARY KEY
- REVOKE
- SELECT (обучающий этап) задачи по SQL запросам
- SET ROLE
- SET TRANSACTION
- SQL — запросы и их обработка с помощью PHP
- SQL — запросы PHP
- sql 2008
- sql запрос
- SQL команды
- SQL Подзапросы
- SQL Соединение таблиц
- SQL Строки и выражения
- SQL ALTER TABLE
- SQL And & Or
- SQL AVG
- SQL COUNT
- SQL DELETE
- SQL SELECT
- SQL UNION
- SQL UPDATE
- UNIQUE
- WinBinder. Создание форм
- XQuery и виртуализация
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Solved problems from sql-ex.ru
ivan-zimin/sql-ex
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to showName already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit timeREADME.md
My excercises from sql-ex.ru
Find the model number, speed, and hard drive size for all PCs under $500. Output: model, speed and hd.
SELECT model, speed, hd FROM pc WHERE price < 500
Find printer manufacturers. Output: maker.
SELECT DISTINCT maker FROM product WHERE type = ‘Printer’
Find the model number, memory size, and screen sizes for notebook PCs priced over $1,000.
SELECT model, ram, screen FROM laptop WHERE price > 1000
Find all the entries in the Color Printer table.
SELECT * FROM printer WHERE color = ‘y’
Find the model number, speed and size of PC hard drives that have 12x or 24x CDs and are priced under $600.
SELECT model, speed, hd FROM PC WHERE (cd = ’12x’ OR cd = ’24x’) AND (price < 600)
Find the speeds of such notebooks for each manufacturer that produces notebook PCs with a hard disk volume of at least 10 GB. Output: manufacturer, speed.
SELECT DISTINCT product.maker AS Maker, laptop.speed AS speed FROM product INNER JOIN laptop ON product.model = laptop.model WHERE laptop.hd >= 10
Find the model numbers and prices of all vendors selling products (of any type) from maker B.
SELECT pc.model, pc.price FROM pc INNER JOIN product ON pc.model = product.model WHERE product.maker = ‘B’
UNION
SELECT laptop.model, laptop.price FROM laptop INNER JOIN product ON laptop.model = product.model WHERE product.maker = ‘B’
UNION
SELECT printer.model, printer.price FROM printer INNER JOIN product ON printer.model = product.model WHERE product.maker = ‘B’Find a PC manufacturer that doesn’t produces laptops.
SELECT DISTINCT maker FROM product WHERE type = ‘PC’ AND maker NOT IN (SELECT maker FROM product WHERE type = ‘Laptop’)
Find PC manufacturers with a processor of at least 450 MHz.
SELECT DISTINCT maker FROM product WHERE model IN (SELECT model FROM pc WHERE speed >= 450)
Find the most expensive printer models.
SELECT model, price FROM printer WHERE price IN (SELECT MAX(price) FROM printer)
Find the average PC speed.
SELECT AVG(speed) AS avg_speed FROM pc
Find the average speed of laptops that cost more than $1,000.
SELECT AVG(speed) FROM laptop WHERE price > 1000
Find the average speed of PC manufactured by A.
SELECT AVG(speed) FROM pc WHERE model IN (SELECT model FROM product WHERE maker = ‘A’)
Find hard drive sizes that are the same on two or more PCs. Display: HD
SELECT hd FROM pc GROUP BY hd HAVING count(hd) > 1
Find pairs of PC models that have the same speed and RAM. On the output, each pair should be shown only once, i.e. (i,j) but not (j,i), Output order: higher model, lower model, speed, and RAM.
SELECT DISTINCT a.model, b.model, a.speed, a.ram FROM pc a, pc b WHERE a.speed = b.speed AND a.ram = b.ram AND a.model > b.model
Find laptop models that are slower than the speed of each of the PCs. Output: type, model, speed
SELECT DISTINCT product.type, product.model, laptop.speed FROM laptop JOIN product ON laptop.model = product.model WHERE laptop.speed < (SELECT MIN(speed) FROM pc)
Find manufacturers of the cheapest color printers. Output: maker, price.
SELECT DISTINCT maker, price FROM product JOIN printer ON product.model = printer.model WHERE color = ‘y’ AND price = (SELECT MIN(price) FROM printer WHERE color = ‘y’)
For each manufacturer that has models in the Laptop table, find the average screen size of their notebook PCs. Output: maker, average screen size.
SELECT p.maker, AVG(l.screen) FROM product p INNER JOIN laptop l ON p.model = l.model GROUP BY p.maker
Find manufacturers that make at least three different PC models. Output: Maker, number of PC models.
SELECT maker, COUNT(1) FROM product WHERE type = ‘pc’ GROUP BY maker HAVING COUNT(1) >= 3
Find the maximum price of PCs produced by each manufacturer that has models in the PC table. Output: maker, maximum price.
SELECT maker, MAX(price) FROM product INNER JOIN pc ON product.model = pc.model GROUP BY maker
For each PC speed that exceeds 600 MHz, determine the average price of a PC with the same speed. Output: speed, average price.
SELECT speed, AVG(price) FROM pc WHERE speed > 600 GROUP BY speed
Find manufacturers that produce PCs with a speed of at least 750 MHz and PC laptops with a speed of at least 750 MHz. Display: Maker
SELECT DISTINCT maker FROM product INNER JOIN pc ON product.model = pc.model WHERE speed >= 750 AND maker IN (SELECT maker FROM product INNER JOIN laptop ON product.model = laptop.model WHERE speed >= 750)
List the model numbers of any type that have the highest price of all the products in the database.
SELECT model FROM ( SELECT model, price FROM pc UNION SELECT model, price FROM laptop UNION SELECT model, price FROM printer ) t1 WHERE price = ( SELECT MAX(price) FROM ( SELECT model, price FROM pc UNION SELECT model, price FROM laptop UNION SELECT model, price FROM printer ) t2 )
Find printer manufacturers that make PCs with the least amount of RAM and the fastest processor among all PCs with the least amount of RAM. Output: Maker.
SELECT DISTINCT maker FROM product WHERE maker IN (SELECT maker FROM product WHERE type=’printer’) AND model IN (SELECT model FROM pc WHERE ram=(SELECT MIN(ram) FROM pc) AND speed=(SELECT MAX(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc)))
Find the average price of PCs and PC notebooks produced by manufacturer A. Output: total average price.
SELECT AVG(price) FROM (SELECT pc.model, price, code, ram, hd FROM pc WHERE model IN (SELECT model FROM product WHERE maker=’A’) UNION SELECT laptop.model, price, code, ram, hd FROM laptop WHERE model IN (SELECT model FROM product WHERE maker=’A’)) a
In the Product table, find models that consist only of numbers or only of Latin letters (A-Z, case insensitive). Output: model number, model type.
SELECT model, type FROM product WHERE UPPER(model) NOT LIKE ‘%[^A-Z]%’ OR model NOT LIKE ‘%[^0-9]%’
Find the class, name, and country for ships in the Ships table that have at least 10 guns.
SELECT s.class, s.name, c.country FROM ships s JOIN classes c ON s.class = c.class WHERE numguns >= 10
Find classes of ships whose guns are at least 16 inches in bore. Output: class and country.
SELECT class, country FROM Classes WHERE bore >=16
List the ships sunk in battles in the North Atlantic. Output: ship.
SELECT ship FROM outcomes INNER JOIN battles ON outcomes.battle = battles.name WHERE result = ‘sunk’ AND battles.name = ‘North Atlantic’
According to the Washington International Treaty from 1922, it is forbidden to build battleships with a displacement more than 35 thousand tons. Show the ships that violated this treaty (only ships with a known launch year should be shown). Output: name.
SELECT name FROM ships INNER JOIN classes ON ships.class = classes.class WHERE displacement > 35000 AND launched >= 1922 AND type = ‘bb’
Find the names of the ships sunk in the battles and the name of the battle in which they were sunk.
SELECT ship, battle FROM outcomes WHERE result = ‘sunk’
Find the battles that took place in years that do not coincide with any of the years of launching ships on the water.
SELECT name FROM battles WHERE year(date) NOT IN (SELECT launched FROM ships WHERE launched IS NOT NULL)
Find the names of all ships in the database that begin with the letter R.
SELECT name FROM ships WHERE name LIKE ‘R%’ UNION SELECT ship FROM outcomes WHERE ship LIKE ‘R%’
Find the names of all ships in the database that are three or more words long (for example, King George V). Assume that words in titles are separated by single spaces, and there are no trailing spaces.
SELECT name FROM ships WHERE name LIKE ‘% % %’ UNION SELECT ship FROM outcomes WHERE ship LIKE ‘% % %’
Укажите сражения, в которых участвовало по меньшей мере три корабля одной и той же страны.
SELECT battle, country FROM outcomes LEFT JOIN ships ON outcomes.ship = ships.name LEFT JOIN classes ON ships.class = classes.class WHERE COUNTRY IS NOT NULL GROUP BY country HAVING COUNT(*) > 2
Схема базы данных:
Определить имена разных пассажиров, когда-либо летевших на одном и том же месте более одного раза.
SELECT name FROM passenger WHERE id_psg IN (SELECT id_psg FROM pass_in_trip GROUP BY id_psg, place HAVING COUNT(*) > 1)
Для всех дней в интервале с 01/04/2003 по 07/04/2003 определить число рейсов из Rostov. Вывод: дата, количество рейсов
SELECT date, COUNT(*) qty FROM pass_in_trip WHERE trip_no IN (SELECT trip_no FROM trip WHERE town_from = ‘rostov’ AND date BETWEEN ‘2003-04-01’ AND ‘2003-04-07’) GROUP BY date
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
LinchenkoKirill/sql_exersices
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to showName already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit timeREADME.md
Найдите номер модели, скорость и размер жесткого диска для всех ПК стоимостью менее 500 дол. Вывести: model, speed и hd. Ссылка
SELECT model, speed, hd FROM PC WHERE price 500
Найдите производителей принтеров. Вывести: maker Ссылка
SELECT maker FROM Product WHERE type = 'Printer' GROUP BY maker
Найдите номер модели, объем памяти и размеры экранов ПК-блокнотов, цена которых превышает 1000 дол. Ссылка
SELECT model,ram,screen FROM Laptop WHERE price > 1000
Найдите все записи таблицы Printer для цветных принтеров. Ссылка
SELECT * FROM Printer WHERE color = 'y'
Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x CD и цену менее 600 дол. Ссылка
SELECT model, speed, hd FROM PC WHERE ( cd = '12x' OR cd = '24x' ) AND price 600
Для каждого производителя, выпускающего ПК-блокноты c объёмом жесткого диска не менее 10 Гбайт, найти скорости таких ПК-блокнотов. Вывод: производитель, скорость. Ссылка
SELECT DISTINCT maker, speed FROM laptop JOIN (SELECT * FROM product WHERE type='laptop') this_table_1 ON laptop.model = this_table_1.model WHERE hd >= 10
Найдите номера моделей и цены всех имеющихся в продаже продуктов (любого типа) производителя B (латинская буква). Ссылка
SELECT DISTINCT pc.model, price FROM pc JOIN product on pc.model = product.model WHERE maker = 'B' UNION SELECT DISTINCT laptop.model, price FROM laptop JOIN product on laptop.model = product.model WHERE maker = 'B' UNION SELECT DISTINCT printer.model, price FROM printer JOIN product on printer.model = product.model WHERE maker = 'B'
Найдите производителя, выпускающего ПК, но не ПК-блокноты. Ссылка
SELECT maker FROM product WHERE type = 'pc' EXCEPT SELECT maker FROM product WHERE type = 'laptop'
Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker Ссылка
SELECT DISTINCT product.maker FROM product JOIN pc on pc.model = product.model WHERE speed >= 450
Найдите модели принтеров, имеющих самую высокую цену. Вывести: model, price Ссылка
SELECT DISTINCT model, price FROM printer WHERE price = (SELECT MAX(price) FROM printer)
Найдите среднюю скорость ПК. Ссылка
SELECT AVG(speed) AS Avg_speed FROM pc
Найдите среднюю скорость ПК-блокнотов, цена которых превышает 1000 дол. Ссылка
SELECT AVG(speed) AS Avg_speed FROM laptop WHERE price > 1000
Найдите среднюю скорость ПК, выпущенных производителем A. Ссылка
SELECT DISTINCT AVG(pc.speed) AS Avg_speed FROM pc JOIN product on pc.model = product.model WHERE maker = 'A'
Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий. Ссылка
SELECT s.class, s.name, c.country FROM ships s JOIN classes c ON s.class = c.class WHERE c.numGuns >= 10
Найдите размеры жестких дисков, совпадающих у двух и более PC. Вывести: HD Ссылка
SELECT hd FROM pc GROUP BY (hd) HAVING COUNT(model) >= 2
Найдите пары моделей PC, имеющих одинаковые скорость и RAM. В результате каждая пара указывается только один раз, т.е. (i,j), но не (j,i), Порядок вывода: модель с большим номером, модель с меньшим номером, скорость и RAM. Ссылка
SELECT DISTINCT p1.model, p2.model, p1.speed, p1.ram FROM pc p1, pc p2 WHERE p1.speed = p2.speed AND p1.ram = p2.ram AND p1.model > p2.model
Найдите модели ПК-блокнотов, скорость которых меньше скорости каждого из ПК. Вывести: type, model, speed Ссылка
SELECT DISTINCT product.type, laptop.model, laptop.speed FROM laptop, product WHERE speed (SELECT MIN(speed) FROM pc) AND product.type ='Laptop'
Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price Ссылка
SELECT DISTINCT maker, price FROM product JOIN printer ON printer.model = product.model WHERE price = (SELECT MIN(price) FROM printer WHERE color='y') AND color='y'
Для каждого производителя, имеющего модели в таблице Laptop, найдите средний размер экрана выпускаемых им ПК-блокнотов. Вывести: maker, средний размер экрана. Ссылка
SELECT maker, AVG(screen) FROM product JOIN laptop ON product.model=laptop.model GROUP BY maker
Найдите производителей, выпускающих по меньшей мере три различных модели ПК. Вывести: Maker, число моделей ПК. Ссылка
SELECT maker as Maker, COUNT(model) as Count_Model FROM product WHERE type='pc' GROUP BY maker HAVING COUNT(model)>=3
Найдите максимальную цену ПК, выпускаемых каждым производителем, у которого есть модели в таблице PC. Вывести: maker, максимальная цена. Ссылка
SELECT maker as Maker, MAX(price) as Max_price FROM product JOIN pc ON product.model = pc.model GROUP BY maker
Для каждого значения скорости ПК, превышающего 600 МГц, определите среднюю цену ПК с такой же скоростью. Вывести: speed, средняя цена. Ссылка
SELECT speed as Speed, AVG(price) as Price FROM pc WHERE speed > 600 GROUP BY speed
Найдите производителей, которые производили бы как ПК со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц. Вывести: Maker Ссылка
SELECT DISTINCT maker FROM product JOIN pc ON product.model=pc.model WHERE speed>=750 AND maker IN (SELECT maker FROM product JOIN laptop ON product.model=laptop.model WHERE speed>=750)
Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции. Ссылка
SELECT model FROM ( SELECT model, price FROM pc UNION SELECT model, price FROM laptop UNION SELECT model, price FROM printer ) table1 WHERE price = ( SELECT MAX(price) FROM ( SELECT price FROM pc UNION SELECT price FROM laptop UNION SELECT price FROM Printer ) table2 )
Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker Ссылка
SELECT DISTINCT maker FROM product WHERE model IN ( SELECT model FROM pc WHERE ram = (SELECT MIN(ram) FROM pc ) AND speed = ( SELECT MAX(speed) FROM pc WHERE ram = ( SELECT MIN(ram) FROM pc ) ) ) AND maker IN ( SELECT maker FROM product WHERE type='printer' )
Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена. Ссылка
SELECT AVG(price) AS AVG_price FROM (SELECT model, price FROM PC UNION ALL SELECT model, price FROM Laptop) AS price INNER JOIN product ON price.model = product.model WHERE maker = 'A'
Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры. Вывести: maker, средний размер HD. Ссылка
SELECT maker as Maker, AVG(hd) as AVG FROM product JOIN pc ON product.model=pc.model WHERE maker IN ( SELECT maker FROM product WHERE type='printer' ) GROUP BY maker
Используя таблицу Product, определить количество производителей, выпускающих по одной модели. Ссылка
SELECT COUNT(maker) as Quantity FROM ( SELECT maker FROM product GROUP BY maker HAVING COUNT(*) = 1 ) this_table
В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o. Ссылка
SELECT income_o.point, income_o.[date], inc, out FROM income_o LEFT JOIN outcome_o ON outcome_o.point = income_o.point AND outcome_o.[date]=income_o.[date] UNION SELECT outcome_o.point, outcome_o.[date], inc, out FROM income_o RIGHT JOIN outcome_o ON outcome_o.point = income_o.point AND outcome_o.[date] = income_o.[date]
В предположении, что приход и расход денег на каждом пункте приема фиксируется произвольное число раз (первичным ключом в таблицах является столбец code), требуется получить таблицу, в которой каждому пункту за каждую дату выполнения операций будет соответствовать одна строка. Вывод: point, date, суммарный расход пункта за день (out), суммарный приход пункта за день (inc). Отсутствующие значения считать неопределенными (NULL). Ссылка
SELECT point, [date], SUM(outs), SUM(incs) FROM (SELECT point, [date], SUM(out) outs, null incs FROM outcome GROUP BY point, [date] UNION SELECT point, [date], null, SUM(inc) incs FROM income GROUP BY point, [date]) this_table GROUP BY point, [date]
Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну. Ссылка
SELECT class, country FROM classes WHERE bore>=16
Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных. Ссылка
SELECT country, cast(avg(bore*bore*bore/2) as numeric(38,2)) FROM (SELECT country, name, bore FROM ships sh JOIN classes c ON sh.class=c.class union SELECT country, ship, bore FROM outcomes o JOIN classes c ON o.ship = c.class) t1 GROUP BY country
Укажите корабли, потопленные в сражениях в Северной Атлантике (North Atlantic). Вывод: ship. Ссылка
SELECT ship FROM Outcomes WHERE battle = 'North Atlantic' AND result = 'sunk'
По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду). Вывести названия кораблей. Ссылка
SELECT name FROM classes, ships WHERE launched >=1922 AND displacement>35000 AND type='bb' AND ships.class = classes.class
В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра). Вывод: номер модели, тип модели. Ссылка
SELECT model, type FROM product WHERE upper(model) NOT like '%[^A-Z]%' OR model not like '%[^0-9]%'
Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes). Ссылка
SELECT DISTINCT name as Name FROM ( SELECT name FROM ships UNION SELECT ship FROM outcomes ) t1 WHERE name IN (SELECT class FROM classes)
Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes). Ссылка
SELECT c.class FROM Classes c LEFT JOIN (Select class, name FROM Ships UNION SELECT Classes.class as class, Outcomes.ship as name FROM Outcomes JOIN Classes ON Outcomes.ship = Classes.class) as s On c.class = s.class GROUP BY c.class HAVING COUNT(s.name)=1
Найдите страны, имевшие когда-либо классы обычных боевых кораблей (‘bb’) и имевшие когда-либо классы крейсеров (‘bc’). Ссылка
SELECT DISTINCT country as COUNTRY FROM classes WHERE type='bb' AND country IN ( SELECT country FROM classes WHERE type = 'bc' )
Найдите корабли, сохранившиеся для будущих сражений ; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой, произошедшей позже. Ссылка
SELECT DISTINCT ship FROM outcomes o1 LEFT JOIN Battles b1 ON b1.name = o1.battle WHERE result = 'damaged' and ship IN( SELECT ship FROM outcomes o2 LEFT JOIN Battles b2 ON b2.name = o2.battle WHERE o2.ship=o1.ship AND b2.date > b1.date )
Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа. Вывести: maker, type Ссылка
SELECT maker, MAX(type) as Type FROM product GROUP BY maker HAVING COUNT(DISTINCT type) = 1 AND COUNT(model) > 1
Для каждого производителя, у которого присутствуют модели хотя бы в одной из таблиц PC, Laptop или Printer, определить максимальную цену на его продукцию. Вывод: имя производителя, если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL, иначе максимальную цену. Ссылка
with D as (SELECT model, price FROM pc UNION SELECT model, price FROM Laptop UNION SELECT model, price FROM Printer) SELECT DISTINCT P.maker, CASE WHEN MAX(CASE WHEN D.price IS NULL THEN 1 ELSE 0 END) = 0 THEN MAX(D.price) END FROM Product P RIGHT JOIN D ON P.model=D.model GROUP BY P.maker
Найдите названия кораблей, потопленных в сражениях, и название сражения, в котором они были потоплены. Ссылка
SELECT ship, battle FROM outcomes WHERE result='sunk'
Укажите сражения, которые произошли в годы, не совпадающие ни с одним из годов спуска кораблей на воду. Ссылка
SELECT name FROM battles WHERE DATEPART(yy, date) NOT IN ( SELECT DATEPART(yy, date) FROM battles JOIN ships ON DATEPART(yy, date)=launched)
Найдите названия всех кораблей в базе данных, начинающихся с буквы R. Ссылка
SELECT * FROM ( SELECT name FROM ships UNION SELECT ship FROM outcomes ) a WHERE name LIKE 'R%'
Найдите названия всех кораблей в базе данных, состоящие из трех и более слов (например, King George V). Считать, что слова в названиях разделяются единичными пробелами, и нет концевых пробелов. Ссылка
SELECT * FROM ( SELECT name FROM ships UNION SELECT ship FROM outcomes ) a WHERE name LIKE '% % %'
Для каждого корабля, участвовавшего в сражении при Гвадалканале (Guadalcanal), вывести название, водоизмещение и число орудий. Ссылка
SELECT DISTINCT ship, displacement, numguns FROM classes LEFT JOIN ships ON classes.class=ships.class RIGHT JOIN outcomes ON classes.class=ship OR ships.name=ship WHERE battle='Guadalcanal'
Определить страны, которые потеряли в сражениях все свои корабли. Ссылка
WITH out AS (SELECT * FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country FROM ships FULL JOIN classes ON ships.class = classes.class ) u ON outcomes.ship=u.s_class UNION SELECT * FROM outcomes JOIN (SELECT ships.name s_name, classes.class s_class, classes.country s_country FROM ships FULL JOIN classes ON ships.class = classes.class ) u ON outcomes.ship=u.s_name) SELECT fin.country FROM ( SELECT DISTINCT t.country, COUNT(t.name) AS num_ships FROM ( SELECT DISTINCT c.country, s.name FROM classes c INNER JOIN Ships s ON s.class= c.class UNION SELECT DISTINCT c.country, o.ship FROM classes c INNER JOIN Outcomes o ON o.ship= c.class) t GROUP BY t.country INTERSECT SELECT out.s_country, COUNT(out.ship) AS num_ships FROM out WHERE out.result='sunk' GROUP BY out.s_country) fin
Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении. Ссылка
SELECT class FROM classes t1 LEFT JOIN outcomes t2 ON t1.class=t2.ship WHERE result='sunk' UNION SELECT class FROM ships LEFT JOIN outcomes ON ships.name=outcomes.ship WHERE result='sunk'
Найдите названия кораблей с орудиями калибра 16 дюймов (учесть корабли из таблицы Outcomes). Ссылка
SELECT s.name FROM ships s JOIN classes c ON s.name=c.class OR s.class = c.class WHERE c.bore = 16 UNION SELECT o.ship FROM outcomes o JOIN classes c ON o.ship=c.class WHERE c.bore = 16
Найдите сражения, в которых участвовали корабли класса Kongo из таблицы Ships. Ссылка
SELECT DISTINCT o.battle FROM ships s JOIN outcomes o ON s.name = o.ship WHERE s.class = 'kongo'
Найдите названия кораблей, имеющих наибольшее число орудий среди всех имеющихся кораблей такого же водоизмещения (учесть корабли из таблицы Outcomes). Ссылка
SELECT NAME FROM ( SELECT name as NAME, displacement, numguns FROM ships INNER JOIN classes ON ships.class = classes.class UNION SELECT ship as NAME, displacement, numguns FROM outcomes INNER JOIN classes ON outcomes.ship= classes.class) as d1 INNER JOIN (SELECT displacement, max(numGuns) as numguns FROM ( SELECT displacement, numguns FROM ships INNER JOIN classes ON ships.class = classes.class UNION SELECT displacement, numguns FROM outcomes INNER JOIN classes ON outcomes.ship= classes.class) as f GROUP BY displacement) as d2 ON d1.displacement=d2.displacement AND d1.numguns =d2.numguns
Определить названия всех кораблей из таблицы Ships, которые могут быть линейным японским кораблем, имеющим число главных орудий не менее девяти, калибр орудий менее 19 дюймов и водоизмещение не более 65 тыс.тонн Ссылка
SELECT s.name as NAME FROM ships s JOIN classes c ON s.class = c.class WHERE country = 'japan' AND (numGuns >= '9' OR numGuns is null) AND (bore '19' or bore is null) AND (displacement '65000' OR displacement is null) AND type='bb'
Определите среднее число орудий для классов линейных кораблей. Получить результат с точностью до 2-х десятичных знаков. Ссылка
SELECT CAST(AVG(numguns*1.0) AS NUMERIC(6,2)) AS Avg_nmg FROM classes WHERE type = 'bb'
С точностью до 2-х десятичных знаков определите среднее число орудий всех линейных кораблей (учесть корабли из таблицы Outcomes). Ссылка
SELECT CAST(AVG(numguns*1.0) AS NUMERIC(6,2)) as AVG_nmg FROM (SELECT ship, numguns, type FROM Outcomes JOIN classes ON ship = class UNION SELECT name, numguns, type FROM ships s JOIN classes c ON c.class = s.class) as x WHERE type = 'bb'
Для каждого класса определите год, когда был спущен на воду первый корабль этого класса. Если год спуска на воду головного корабля неизвестен, определите минимальный год спуска на воду кораблей этого класса. Вывести: класс, год. Ссылка
SELECT c.class, min(s.launched) FROM classes c LEFT JOIN ships s ON c.class = s.class GROUP BY c.class
Для каждого класса определите число кораблей этого класса, потопленных в сражениях. Вывести: класс и число потопленных кораблей. Ссылка
SELECT c.class, COUNT(s.ship) FROM classes c LEFT JOIN (SELECT o.ship, sh.class FROM outcomes o LEFT JOIN ships sh ON sh.name = o.ship WHERE o.result = 'sunk') AS s ON s.class = c.class OR s.ship = c.class GROUP BY c.class
Для классов, имеющих потери в виде потопленных кораблей и не менее 3 кораблей в базе данных, вывести имя класса и число потопленных кораблей. Ссылка
SELECT class, COUNT(ship) count_sunked FROM (SELECT name, class FROM ships UNION SELECT ship, ship FROM outcomes) t LEFT JOIN outcomes ON name = ship AND result = 'sunk' GROUP BY class HAVING COUNT(ship) > 0 AND COUNT(*) > 2;
Для каждого типа продукции и каждого производителя из таблицы Product c точностью до двух десятичных знаков найти процентное отношение числа моделей данного типа данного производителя к общему числу моделей этого производителя. Вывод: maker, type, процентное отношение числа моделей данного типа к общему числу моделей производителя Ссылка
SELECT m, t, CAST(100.0*cc/cc1 AS NUMERIC(5,2)) FROM (SELECT m, t, sum(c) cc from (SELECT DISTINCT maker m, 'PC' t, 0 c FROM product UNION ALL SELECT DISTINCT maker, 'Laptop', 0 FROM product UNION ALL SELECT DISTINCT maker, 'Printer', 0 FROM product UNION ALL SELECT maker, type, count(*) FROM product GROUP BY maker, type) as tt GROUP BY m, t) tt1 JOIN ( SELECT maker, count(*) cc1 FROM product GROUP BY maker ) tt2
Посчитать остаток денежных средств на каждом пункте приема для базы данных с отчетностью не чаще одного раза в день. Вывод: пункт, остаток. Ссылка
SELECT c1, c2- (CASE WHEN o2 is null THEN 0 ELSE o2 END) FROM (SELECT point c1, sum(inc) c2 FROM income_o GROUP BY point) as t1 LEFT JOIN (SELECT point o1, sum(out) o2 FROM outcome_o GROUP BY point) as t2 ON c1=o1
Посчитать остаток денежных средств на начало дня 15/04/01 на каждом пункте приема для базы данных с отчетностью не чаще одного раза в день. Вывод: пункт, остаток. Замечание. Не учитывать пункты, информации о которых нет до указанной даты. Ссылка
SELECT c1, c2- (CASE WHEN o2 is null THEN 0 ELSE o2 END) FROM (SELECT point c1, sum(inc) c2 FROM income_o WHERE date'2001-04-15' GROUP BY point) as t1 LEFT JOIN (SELECT point o1, sum(out) o2 FROM outcome_o WHERE date'2001-04-15' GROUP BY point) as t2 ON c1=o1
Посчитать остаток денежных средств на всех пунктах приема для базы данных с отчетностью не чаще одного раза в день. Ссылка
SELECT sum(i) FROM (SELECT point, SUM(inc) as i FROM income_o GROUP BY point UNION SELECT point, -sum(out) as i FROM outcome_o GROUP BY point ) as t
Посчитать остаток денежных средств на всех пунктах приема на начало дня 15/04/01 для базы данных с отчетностью не чаще одного раза в день. Ссылка
SELECT (SELECT sum(inc) FROM Income_o WHERE date'2001-04-15') - (SELECT sum(out) FROM Outcome_o WHERE date'2001-04-15') AS remain
Определить имена разных пассажиров, когда-либо летевших на одном и том же месте более одного раза. Ссылка
SELECT name FROM Passenger WHERE ID_psg in (SELECT ID_psg FROM Pass_in_trip GROUP BY place, ID_psg HAVING count(*)>1)
Используя таблицы Income и Outcome, для каждого пункта приема определить дни, когда был приход, но не было расхода и наоборот. Вывод: пункт, дата, тип операции (inc/out), денежная сумма за день. Ссылка
SELECT i1.point, i1.date, 'inc', sum(inc) FROM Income, (SELECT point, date FROM Income EXCEPT SELECT Income.point, Income.date FROM Income JOIN Outcome ON (Income.point=Outcome.point) AND (Income.date=Outcome.date) ) AS i1 WHERE i1.point=Income.point AND i1.date=Income.date GROUP BY i1.point, i1.date UNION SELECT o1.point, o1.date, 'out', sum(out) FROM Outcome, (SELECT point, date FROM Outcome EXCEPT SELECT Income.point, Income.date FROM Income JOIN Outcome ON (Income.point=Outcome.point) AND (Income.date=Outcome.date) ) AS o1 WHERE o1.point=Outcome.point AND o1.date=Outcome.date GROUP BY o1.point, o1.date
Пронумеровать уникальные пары из Product, упорядочив их следующим образом:
- имя производителя (maker) по возрастанию;
- тип продукта (type) в порядке PC, Laptop, Printer. Если некий производитель выпускает несколько типов продукции, то выводить его имя только в первой строке; остальные строки для ЭТОГО производителя должны содержать пустую строку символов (»). Ссылка
SELECT row_number() over(ORDER BY maker,s),t, type FROM (SELECT maker,type, CASE WHEN type='PC' THEN 0 WHEN type='Laptop' THEN 1 ELSE 2 END AS s, CASE WHEN type='Laptop' AND (maker in (SELECT maker FROM Product WHERE type='PC')) THEN '' WHEN type='Printer' AND ((maker in (SELECT maker FROM Product WHERE type='PC')) OR (maker in (SELECT maker FROM Product WHERE type='Laptop'))) THEN '' ELSE maker END AS t FROM Product GROUP BY maker,type) AS t1 ORDER BY maker, s
Для всех дней в интервале с 01/04/2003 по 07/04/2003 определить число рейсов из Rostov. Вывод: дата, количество рейсов Ссылка
SELECT date, max(c) FROM (SELECT date,count(*) AS c FROM Trip, (SELECT trip_no,date FROM Pass_in_trip WHERE date>='2003-04-01' AND date'2003-04-07' GROUP BY trip_no, date) AS t1 WHERE Trip.trip_no=t1.trip_no AND town_from='Rostov' GROUP BY date UNION ALL SELECT '2003-04-01',0 UNION ALL SELECT '2003-04-02',0 UNION ALL SELECT '2003-04-03',0 UNION ALL SELECT '2003-04-04',0 UNION ALL SELECT '2003-04-05',0 UNION ALL SELECT '2003-04-06',0 UNION ALL SELECT '2003-04-07',0) AS t2 GROUP BY date
Найти количество маршрутов, которые обслуживаются наибольшим числом рейсов. Замечания.
- A — B и B — A считать РАЗНЫМИ маршрутами.
- Использовать только таблицу Trip Ссылка
SELECT count(*) FROM (SELECT TOP 1 WITH TIES count(*) c, town_from, town_to FROM trip GROUP BY town_from, town_to ORDER BY c desc) as t
Найти количество маршрутов, которые обслуживаются наибольшим числом рейсов. Замечания.
- A — B и B — A считать ОДНИМ И ТЕМ ЖЕ маршрутом.
- Использовать только таблицу Trip Ссылка
SELECT count(*) as Count FROM ( SELECT TOP 1 WITH TIES sum(c) cc, c1, c2 FROM ( SELECT count(*) c, town_from c1, town_to c2 FROM trip WHERE town_from>=town_to GROUP BY town_from, town_to UNION ALL SELECT count(*) c,town_to, town_from FROM trip WHERE town_to>town_from GROUP BY town_from, town_to ) as t GROUP BY c1,c2 ORDER BY cc DESC ) as tt
По таблицам Income и Outcome для каждого пункта приема найти остатки денежных средств на конец каждого дня, в который выполнялись операции по приходу и/или расходу на данном пункте. Учесть при этом, что деньги не изымаются, а остатки/задолженность переходят на следующий день. Вывод: пункт приема, день в формате «dd/mm/yyyy», остатки/задолженность на конец этого дня. Ссылка
with q as ( SELECT isnull(i.point, o.point) point , isnull(i.date, o.date) date , coalesce(sum(i.inc), 0) - coalesce(sum(o.out), 0) balance FROM income i FULL JOIN outcome o ON i.point=o.point AND i.date=o.date AND i.code=o.code GROUP BY isnull(i.point, o.point), isnull(i.date, o.date) ) SELECT point -- 103 means format "dd/mm/yyyy" , convert(varchar, date, 103) day , sum(balance) over(partition by point order by date RANGE UNBOUNDED PRECEDING) as rem FROM q ORDER BY point,date
Укажите сражения, в которых участвовало по меньшей мере три корабля одной и той же страны. Ссылка
SELECT DISTINCT o.battle FROM outcomes o LEFT JOIN ships s ON s.name = o.ship LEFT JOIN classes c ON o.ship = c.class OR s.class = c.class WHERE c.country IS NOT NULL GROUP BY c.country, o.battle HAVING COUNT(o.ship) >= 3
Найти тех производителей ПК, все модели ПК которых имеются в таблице PC. Ссылка
SELECT p.maker FROM product p LEFT JOIN pc ON pc.model = p.model WHERE p.type = 'PC' GROUP BY p.maker HAVING COUNT(p.model) = COUNT(pc.model)
Среди тех, кто пользуется услугами только какой-нибудь одной компании, определить имена разных пассажиров, летавших чаще других. Вывести: имя пассажира и число полетов. Ссылка
SELECT TOP 1 WITH TIES name, c3 FROM passenger JOIN (SELECT c1, max(c3) c3 FROM ( SELECT pass_in_trip.ID_psg c1, Trip.ID_comp c2, count(*) c3 FROM pass_in_trip JOIN trip ON trip.trip_no=pass_in_trip.trip_no GROUP BY pass_in_trip.ID_psg, Trip.ID_comp ) as t group by c1 HAVING count(*)=1) as tt ON ID_psg=c1 ORDER BY c3 DESC
Для каждой страны определить сражения, в которых не участвовали корабли данной страны. Вывод: страна, сражение Ссылка
SELECT c.country, b.name FROM Classes c, Battles b EXCEPT SELECT c.country, o.battle FROM Outcomes o LEFT JOIN ships s ON o.ship=s.name LEFT JOIN Classes c ON o.ship=c.class OR s.class=c.class WHERE c.country is not null GROUP BY c.country, o.battle
Вывести все классы кораблей России (Russia). Если в базе данных нет классов кораблей России, вывести классы для всех имеющихся в БД стран. Вывод: страна, класс Ссылка
SELECT c.country, c.class FROM classes c WHERE UPPER(c.country) = 'RUSSIA' AND EXISTS ( SELECT c.country, c.class FROM classes c WHERE UPPER(c.country) = 'RUSSIA' ) UNION ALL SELECT c.country, c.class FROM classes c WHERE NOT EXISTS (SELECT c.country, c.class FROM classes c WHERE UPPER(c.country) = 'RUSSIA' )
Для тех производителей, у которых есть продукты с известной ценой хотя бы в одной из таблиц Laptop, PC, Printer найти максимальные цены на каждый из типов продукции. Вывод: maker, максимальная цена на ноутбуки, максимальная цена на ПК, максимальная цена на принтеры. Для отсутствующих продуктов/цен использовать NULL. Ссылка
SELECT shipname,launched,batname FROM (SELECT s.name as shipname,launched,b.name as batname, row_number() over (partition by s.name order by "date") as num FROM ships s,battles b WHERE to_char("date",'yyyy')>=launched AND launched is not null) WHERE num = 1 UNION ( SELECT name,launched,(SELECT name FROM battles WHERE "date" = (SELECT MAX("date") FROM battles)) as batname FROM ships WHERE launched is null )
Определить время, проведенное в полетах, для пассажиров, летавших всегда на разных местах. Вывод: имя пассажира, время в минутах. Ссылка
with pf as( SELECT id_psg, count(*) as place_count FROM pass_in_trip GROUP BY id_psg, place ), pt as( SELECT pt.id_psg, pt.trip_no , ps.name , time_out, time_in , CASE when time_out >= time_in then time_in-time_out + 1440 else time_in-time_out end as time FROM pass_in_trip pt JOIN passenger ps ON ps.id_psg=pt.id_psg JOIN ( SELECT datepart(hh, time_out)*60 + datepart(mi, time_out) time_out , datepart(hh, time_in)*60 + datepart(mi, time_in) time_in , trip_no FROM trip t ) as t ON t.trip_no=pt.trip_no WHERE 1=ALL(select place_count FROM pf WHERE pf.id_psg=pt.id_psg) ) SELECT name, sum(time) fly_time FROM pt GROUP BY id_psg, name
Определить дни, когда было выполнено максимальное число рейсов из Ростова (‘Rostov’). Вывод: число рейсов, дата. Ссылка
SELECT TOP 1 WITH TIES * FROM (SELECT COUNT(distinct(pt.trip_no)) qty, pt.date FROM Trip t, Pass_in_trip pt WHERE t.trip_no=pt.trip_no AND t.town_from = 'Rostov' GROUP BY pt.date) t1 ORDER BY t1.qty DESC
Для каждого сражения определить первый и последний день месяца, в котором оно состоялось. Вывод: сражение, первый день месяца, последний день месяца.
Замечание: даты представить без времени в формате «yyyy-mm-dd». Ссылка
SELECT name, REPLACE(CONVERT(CHAR(12), DATEADD(m, DATEDIFF(m,0,date),0), 102),'.','-') AS first_day, REPLACE(CONVERT(CHAR(12), DATEADD(s,-1,DATEADD(m, DATEDIFF(m,0,date)+1,0)), 102),'.','-') AS last_day FROM Battles
Определить пассажиров, которые больше других времени провели в полетах. Вывод: имя пассажира, общее время в минутах, проведенное в полетах Ссылка
SELECT Passenger.name, A.minutes FROM (SELECT P.ID_psg, SUM((DATEDIFF(minute, time_out, time_in) + 1440)%1440) AS minutes, MAX(SUM((DATEDIFF(minute, time_out, time_in) + 1440)%1440)) OVER() AS MaxMinutes FROM Pass_in_trip P JOIN Trip AS T ON P.trip_no = T.trip_no GROUP BY P.ID_psg ) AS A JOIN Passenger ON Passenger.ID_psg = A.ID_psg WHERE A.minutes = A.MaxMinutes
Найти производителей любой компьютерной техники, у которых нет моделей ПК, не представленных в таблице PC. Ссылка
SELECT DISTINCT maker FROM product WHERE maker NOT IN ( SELECT maker FROM product WHERE type='PC' AND model NOT IN ( SELECT model FROM PC));
Из таблицы Outcome получить все записи за тот месяц (месяцы), с учетом года, в котором суммарное значение расхода (out) было максимальным. Ссылка
SELECT O.* FROM outcome O INNER JOIN ( SELECT TOP 1 WITH TIES YEAR(date) AS Y, MONTH(date) AS M, SUM(out) AS ALL_TOTAL FROM outcome GROUP BY YEAR(date), MONTH(date) ORDER BY ALL_TOTAL DESC ) R ON YEAR(O.date) = R.Y AND MONTH(O.date) = R.M
В наборе записей из таблицы PC, отсортированном по столбцу code (по возрастанию) найти среднее значение цены для каждой шестерки подряд идущих ПК. Вывод: значение code, которое является первым в наборе из шести строк, среднее значение цены в наборе. Ссылка
WITH CTE(code,price,number) AS ( SELECT PC.code,PC.price, number= ROW_NUMBER() OVER (ORDER BY PC.code) FROM PC ) SELECT CTE.code, AVG(C.price) FROM CTE JOIN CTE C ON (C.number-CTE.number)6 AND (C.number-CTE.number)> =0 GROUP BY CTE.number,CTE.code HAVING COUNT(CTE.number)=6
Определить названия всех кораблей из таблицы Ships, которые удовлетворяют, по крайней мере, комбинации любых четырёх критериев из следующего списка: numGuns = 8 bore = 15 displacement = 32000 type = bb launched = 1915 class=Kongo country=USA Ссылка
SELECT name as NAME FROM Ships AS s JOIN Classes AS cl1 ON s.class = cl1.class WHERE CASE WHEN numGuns = 8 THEN 1 ELSE 0 END + CASE WHEN bore = 15 THEN 1 ELSE 0 END + CASE WHEN displacement = 32000 THEN 1 ELSE 0 END + CASE WHEN type = 'bb' THEN 1 ELSE 0 END + CASE WHEN launched = 1915 THEN 1 ELSE 0 END + CASE WHEN s.class = 'Kongo' THEN 1 ELSE 0 END + CASE WHEN country = 'USA' THEN 1 ELSE 0 END > = 4;
Для каждой компании подсчитать количество перевезенных пассажиров (если они были в этом месяце) по декадам апреля 2003. При этом учитывать только дату вылета. Вывод: название компании, количество пассажиров за каждую декаду Ссылка
SELECT C.name, A.N_1_10, A.N_11_21, A.N_21_30 FROM (SELECT T.ID_comp, SUM(CASE WHEN DAY(P.date) 11 THEN 1 ELSE 0 END) AS N_1_10, SUM(CASE WHEN (DAY(P.date) > 10 AND DAY(P.date) 21) THEN 1 ELSE 0 END) AS N_11_21, SUM(CASE WHEN DAY(P.date) > 20 THEN 1 ELSE 0 END) AS N_21_30 FROM Trip AS T JOIN Pass_in_trip AS P ON T.trip_no = P.trip_no AND CONVERT(char(6), P.date, 112) = '200304' GROUP BY T.ID_comp ) AS A JOIN Company AS C ON A.ID_comp = C.ID_comp
Найти производителей, которые выпускают только принтеры или только PC. При этом искомые производители PC должны выпускать не менее 3 моделей. Ссылка
SELECT maker FROM product GROUP BY maker HAVING count(distinct type) = 1 AND (min(type) = 'printer' OR (min(type) = 'pc' AND count(model) >= 3))
Для каждого производителя перечислить в алфавитном порядке с разделителем «/» все типы выпускаемой им продукции. Вывод: maker, список типов продукции Ссылка
SELECT maker, CASE count(distinct type) when 2 then MIN(type) + '/' + MAX(type) when 1 then MAX(type) when 3 then 'Laptop/PC/Printer' END FROM Product GROUP BY maker
Считая, что пункт самого первого вылета пассажира является местом жительства, найти не москвичей, которые прилетали в Москву более одного раза. Вывод: имя пассажира, количество полетов в Москву Ссылка
SELECT DISTINCT name, COUNT(town_to) Qty FROM Trip tr JOIN Pass_in_trip pit ON tr.trip_no = pit.trip_no JOIN Passenger psg ON pit.ID_psg = psg.ID_psg WHERE town_to = 'Moscow' AND pit.ID_psg NOT IN(SELECT DISTINCT ID_psg FROM Trip tr JOIN Pass_in_trip pit ON tr.trip_no = pit.trip_no WHERE date+time_out = (SELECT MIN (date+time_out) FROM Trip tr1 JOIN Pass_in_trip pit1 ON tr1.trip_no = pit1.trip_no WHERE pit.ID_psg = pit1.ID_psg) AND town_from = 'Moscow') GROUP BY pit.ID_psg, name HAVING COUNT(town_to) > 1
29)Среди тех, кто пользуется услугами только одной компании, определить имена разных пассажиров, летавших чаще других. Вывести: имя пассажира, число полетов и название компании. Ссылка
SELECT (SELECT name FROM Passenger WHERE ID_psg = B.ID_psg) AS name, B.trip_Qty, (SELECT name FROM Company WHERE ID_comp = B.ID_comp) AS Company FROM (SELECT P.ID_psg, MIN(T.ID_comp) AS ID_comp, COUNT(*) AS trip_Qty, MAX(COUNT(*)) OVER() AS Max_Qty FROM Pass_in_trip AS P JOIN Trip AS T ON P.trip_no = T.trip_no GROUP BY P.ID_psg HAVING MIN(T.ID_comp) = MAX(T.ID_comp) ) AS B WHERE B.trip_Qty = B.Max_Qty;
Найти производителей, у которых больше всего моделей в таблице Product, а также тех, у которых меньше всего моделей. Вывод: maker, число моделей Ссылка
SELECT Maker , count(distinct model) Qty FROM Product GROUP BY maker HAVING count(distinct model) > = ALL (SELECT count(distinct model) FROM Product GROUP BY maker) or count(distinct model) ALL (SELECT count(distinct model) FROM Product GROUP BY maker)
Вывести все строки из таблицы Product, кроме трех строк с наименьшими номерами моделей и трех строк с наибольшими номерами моделей. Ссылка
SELECT t1.maker, t1.model, t1.type FROM( SELECT row_number() over (order by model) p1, row_number() over (order by model DESC) p2, * FROM product ) t1 WHERE p1 > 3 AND p2 > 3
C точностью до двух десятичных знаков определить среднее количество краски на квадрате. Ссылка
SELECT count(maker) FROM product WHERE maker in ( SELECT maker FROM product GROUP BY maker HAVING count(model) = 1 )
Выбрать все белые квадраты, которые окрашивались только из баллончиков, пустых к настоящему времени. Вывести имя квадрата Ссылка
SELECT Q_NAME FROM utQ WHERE Q_ID IN (SELECT DISTINCT B.B_Q_ID FROM (SELECT B_Q_ID FROM utB GROUP BY B_Q_ID HAVING SUM(B_VOL) = 765) AS B WHERE B.B_Q_ID NOT IN (SELECT B_Q_ID FROM utB WHERE B_V_ID IN (SELECT B_V_ID FROM utB GROUP BY B_V_ID HAVING SUM(B_VOL) 255)))
Для каждой компании, перевозившей пассажиров, подсчитать время, которое провели в полете самолеты с пассажирами. Вывод: название компании, время в минутах. Ссылка
select c.name, sum(vr.vr) from (select distinct t.id_comp, pt.trip_no, pt.date,t.time_out,t.time_in,--pt.id_psg, case when DATEDIFF(mi, t.time_out,t.time_in)> 0 then DATEDIFF(mi, t.time_out,t.time_in) when DATEDIFF(mi, t.time_out,t.time_in)0 then DATEDIFF(mi, t.time_out,t.time_in+1) end vr from pass_in_trip pt left join trip t on pt.trip_no=t.trip_no ) vr left join company c on vr.id_comp=c.id_comp group by c.name;
Для семи последовательных дней, начиная от минимальной даты, когда из Ростова было совершено максимальное число рейсов, определить число рейсов из Ростова. Вывод: дата, количество рейсов Ссылка
SELECT DATEADD(day, S.Num, D.date) AS Dt, (SELECT COUNT(DISTINCT P.trip_no) FROM Pass_in_trip P JOIN Trip T ON P.trip_no = T.trip_no AND T.town_from = 'Rostov' AND P.date = DATEADD(day, S.Num, D.date)) AS Qty FROM (SELECT (3 * ( x - 1 ) + y - 1) AS Num FROM (SELECT 1 AS x UNION ALL SELECT 2 UNION ALL SELECT 3) AS N1 CROSS JOIN (SELECT 1 AS y UNION ALL SELECT 2 UNION ALL SELECT 3) AS N2 WHERE (3 * ( x - 1 ) + y ) 8) AS S, (SELECT MIN(A.date) AS date FROM (SELECT P.date, COUNT(DISTINCT P.trip_no) AS Qty, MAX(COUNT(DISTINCT P.trip_no)) OVER() AS M_Qty FROM Pass_in_trip AS P JOIN Trip AS T ON P.trip_no = T.trip_no AND T.town_from = 'Rostov' GROUP BY P.date) AS A WHERE A.Qty = A.M_Qty) AS D
На основании информации из таблицы Pass_in_Trip, для каждой авиакомпании определить:
- количество выполненных перелетов;
- число использованных типов самолетов;
- количество перевезенных различных пассажиров;
- общее число перевезенных компанией пассажиров. Вывод: Название компании, 1), 2), 3), 4). Ссылка
SELECT name, COUNT(DISTINCT CONVERT(CHAR(24),date)+CONVERT(CHAR(4),Trip.trip_no)), COUNT(DISTINCT plane), COUNT(DISTINCT ID_psg), COUNT(*) FROM Company,Pass_in_trip,Trip WHERE Company.ID_comp=Trip.ID_comp and Trip.trip_no=Pass_in_trip.trip_no GROUP BY Company.ID_comp,name
При условии, что баллончики с красной краской использовались более одного раза, выбрать из них такие, которыми окрашены квадраты, имеющие голубую компоненту. Вывести название баллончика Ссылка
with r as (select v.v_name, v.v_id, count(case when v_color = 'R' then 1 end) over(partition by v_id) cnt_r, count(case when v_color = 'B' then 1 end) over(partition by b_q_id) cnt_b FROM utV v join utB b on v.v_id = b.b_v_id) SELECT v_name FROM r WHERE cnt_r > 1 AND cnt_b > 0 GROUP BY v_name
Отобрать из таблицы Laptop те строки, для которых выполняется следующее условие: значения из столбцов speed, ram, price, screen возможно расположить таким образом, что каждое последующее значение будет превосходить предыдущее в 2 раза или более. Замечание: все известные характеристики ноутбуков больше нуля. Вывод: code, speed, ram, price, screen. Ссылка
SELECT code, speed, ram, price, screen FROM laptop WHERE exists ( SELECT 1 x FROM ( SELECT v, rank()over(order by v) rn FROM( select cast(speed as float) sp, cast(ram as float) rm, CAST(price as float) pr, cast(screen as float) sc )l unpivot(v for c in (sp, rm, pr, sc))u )l pivot(max(v) for rn in ([1],[2],[3],[4]))p WHERE [1]*2 [2] and [2]*2 [3] AND [3]*2 [4] )
Вывести список ПК, для каждого из которых результат побитовой операции ИЛИ, примененной к двоичным представлениям скорости процессора и объема памяти, содержит последовательность из не менее четырех идущих подряд единичных битов. Вывод: код модели, скорость процессора, объем памяти. Ссылка
with CTE AS (SELECT 1 n, cast (0 as varchar(16)) bit_or, code, speed, ram FROM PC UNION ALL SELECT n*2, cast (convert(bit,(speed|ram)&n) as varchar(1))+cast(bit_or as varchar(15)) , code, speed, ram FROM CTE WHERE n 65536 ) SELECT code, speed, ram FROM CTE WHERE n = 65536 AND CHARINDEX('1111', bit_or )> 0
Рассматриваются только таблицы Income_o и Outcome_o. Известно, что прихода/расхода денег в воскресенье не бывает. Для каждой даты прихода денег на каждом из пунктов определить дату инкассации по следующим правилам:
- Дата инкассации совпадает с датой прихода, если в таблице Outcome_o нет записи о выдаче денег в эту дату на этом пункте.
- В противном случае — первая возможная дата после даты прихода денег, которая не является воскресеньем и в Outcome_o не отмечена выдача денег сдатчикам вторсырья в эту дату на этом пункте. Вывод: пункт, дата прихода денег, дата инкассации. Ссылка
SELECT point,"date" income_date,"date" + nvl (min(case when diff > cnt then cnt else null end), max(cnt)+1 ) incass_date FROM (SELECT i.point, i."date", (trunc(o."date") - trunc(i."date")) diff, count(1) over (partition by i.point, i."date" order by o."date" rows between unbounded preceding and current row)-1 cnt FROM income_o i JOIN (select point, "date", 1 disabled FROM outcome_o UNION SELECT point, trunc("date"+7,'DAY'), 1 disabled FROM income_o) o ON i.point = o.point WHERE o."date" > = i."date") GROUP BY point, "date"
Написать запрос, который выводит все операции прихода и расхода из таблиц Income и Outcome в следующем виде: дата, порядковый номер записи за эту дату, пункт прихода, сумма прихода, пункт расхода, сумма расхода. При этом все операции прихода по всем пунктам, совершённые в течение одного дня, упорядочены по полю code, и так же все операции расхода упорядочены по полю code. В случае, если операций прихода/расхода за один день было не равное количество, выводить NULL в соответствующих колонках на месте недостающих операций. Ссылка
SELECT DISTINCT A.date , A.R, B.point, B.inc, C.point, C.out FROM (Select distinct date, ROW_Number() OVER(PARTITION BY date ORDER BY code asc) as R FROM Income UNION SELECT DISTINCT date, ROW_Number() OVER(PARTITION BY date ORDER BY code asc) FROM Outcome) A LEFT JOIN (Select date, point, inc , ROW_Number() OVER(PARTITION BY date ORDER BY code asc) as RI FROM Income ) B ON B.date=A.date and B.RI=A.R LEFT JOIN (Select date, point, out , ROW_Number() OVER(PARTITION BY date ORDER BY code asc) as RO FROM Outcome ) C ON C.date=A.date AND C.RO=A.R;
- ▼апреля (121)
