Какой ие кабинет ы пользуются самым большим спросом
Перейти к содержимому

Какой ие кабинет ы пользуются самым большим спросом

  • автор:

Какие IE кабинеты пользуются самым большим спросом в SQL?

Самым популярным типом кабинетов в SQL являются кабинеты SELECT и INSERT. Кабинет SELECT используется для извлечения данных из таблицы, а кабинет INSERT используется для добавления новых данных в таблицу. Вот примеры использования этих кабинетов:

 -- Пример использования кабинета SELECT для извлечения данных SELECT * FROM employees; -- Пример использования кабинета INSERT для добавления новых данных INSERT INTO employees (name, age, salary) VALUES ('John Doe', 30, 50000); 

Детальный ответ

Привет! Рад видеть тебя здесь. Сегодня мы поговорим о том, какие индексы в SQL получают наибольший спрос. Индексы в базах данных используются для оптимизации производительности запросов, так как они позволяют быстро найти нужные данные. Перед тем, как углубиться в детали различных видов индексов, давай сначала разберемся, что такое индекс вообще. Индекс – это отдельная структура данных, которая содержит отсортированные значения и ссылки на строки в таблице базы данных. Они ускоряют поиск данных, особенно когда таблица содержит много записей.

Типы индексов, пользующихся большим спросом в SQL

1. Одностолбцовые индексы Одностолбцовый индекс – это индекс, созданный только для одного столбца. В самых простых случаях этого достаточно, и он может значительно ускорить поиск и сортировку данных в этом столбце. Давай рассмотрим пример создания одностолбцового индекса в SQL:

CREATE INDEX idx_last_name ON employees (last_name);

2. Многоколоночные индексы Многоколоночный индекс, также известный как составной индекс, создается для нескольких столбцов таблицы. Он позволяет совместно использовать эти столбцы для быстрого поиска данных. Пример создания многоколоночного индекса в SQL:

CREATE INDEX idx_full_name ON employees (first_name, last_name);

3. Уникальные индексы Уникальный индекс гарантирует, что значения столбца, на котором он создан, являются уникальными. Это очень полезно для предотвращения дублирования данных. Пример создания уникального индекса в SQL:

CREATE UNIQUE INDEX idx_email ON employees (email);

4. Полнотекстовые индексы Полнотекстовые индексы позволяют эффективно искать текстовые данные по ключевым словам или фразам. Они особенно полезны, когда требуется выполнить поиск в больших объемах текста. Пример создания полнотекстового индекса в SQL:

CREATE FULLTEXT INDEX idx_description ON products (description);

Заключение

В этой статье мы рассмотрели различные типы индексов, которые пользуются наибольшим спросом в SQL. Одностолбцовые индексы, многоколоночные индексы, уникальные индексы и полнотекстовые индексы – все они играют важную роль в оптимизации производительности баз данных. Помни, что правильное использование индексов может значительно улучшить скорость выполнения запросов к базе данных. Надеюсь, эта информация была полезной для тебя! Если у тебя есть еще вопросы, не стесняйся задавать их. Удачи в изучении SQL!

SQL ACADEMY ответы и решения заданий (часть 3, задания 45-66)

SQL Academy (ответы и решения заданий 45-66)

SQL Academy (ответы и решения заданий 45-66)

ВКонтакте WhatsApp Pinterest Facebook Email

Задание 45. Какой(ие) кабинет(ы) пользуются самым большим спросом?

SELECT classroom FROM Schedule GROUP BY classroom HAVING COUNT(classroom) = (SELECT COUNT(classroom) FROM Schedule GROUP BY classroom ORDER BY COUNT(classroom) DESC LIMIT 1)

Задание 46. В каких классах введет занятия преподаватель “Krauze” ?

SELECT DISTINCT name FROM Class JOIN Schedule ON Class.id=Schedule.class JOIN Teacher ON Schedule.teacher=Teacher.id WHERE Teacher.last_name='Krauze';

Задание 47. Сколько занятий провел Krauze 30 августа 2019 г.?

SELECT COUNT(teacher) AS count FROM Schedule WHERE date='2019-08-30'and teacher=( SELECT id FROM Teacher WHERE last_name='Krauze');

Задание 48. Выведите заполненность классов в порядке убывания

SELECT c.name, COUNT(sc.student) AS count FROM Class AS c JOIN Student_in_class AS sc ON c.id=sc.class GROUP BY c.id ORDER BY count DESC;

Задание 49. Какой процент обучающихся учится в 10 A классе ?

SELECT COUNT(student) * 100 / (SELECT COUNT(student) FROM Student_in_class) AS percent FROM Student_in_class JOIN Class ON Student_in_class.class=Class.id WHERE name='10 A';

Задание 50. Какой процент обучающихся родился в 2000 году? Результат округлить до целого в меньшую сторону.

SELECT FLOOR(COUNT(id)*100/(SELECT COUNT(id) FROM Student)) AS percent FROM Student WHERE YEAR(birthday)=2000;

Задание 51. Добавьте товар с именем “Cheese” и типом “food” в список товаров (Goods). В качестве первичного ключа (good_id) укажите количество записей в таблице + 1.

INSERT INTO Goods SET good_id=(SELECT COUNT(*)+1 FROM Goods AS a), good_name='Cheese', type=(SELECT good_type_id FROM GoodTypes WHERE good_type_name='food');

Задание 52. Добавьте в список типов товаров (GoodTypes) новый тип “auto”. В качестве первичного ключа (good_type_id) укажите количество записей в таблице + 1

INSERT INTO GoodTypes SET good_type_id=(SELECT COUNT(*)+1 FROM GoodTypes AS a), good_type_name='auto';

Задание 53. Измените имя “Andie Quincey” на новое “Andie Anthony”.

UPDATE FamilyMembers SET member_name='Andie Anthony' WHERE member_name='Andie Quincey';

Задание 54. Удалить всех членов семьи с фамилией “Quincey”.

DELETE FROM FamilyMembers WHERE member_name LIKE '%Quincey';

Задание 55. Удалить компании, совершившие наименьшее количество рейсов.

DELETE FROM Company WHERE Company.id IN ( SELECT company FROM Trip GROUP BY company HAVING COUNT(id) = (SELECT MIN(count) FROM (SELECT COUNT(id) AS count FROM Trip GROUP BY company) AS min_count) );

Задание 56. Удалить все перелеты, совершенные из Москвы (Moscow).

DELETE FROM Trip WHERE town_from='Moscow';

Задание 57. Перенести расписание всех занятий на 30 мин. вперед.

UPDATE Timepair SET start_pair=start_pair + INTERVAL 30 MINUTE, end_pair=end_pair + INTERVAL 30 MINUTE;

Задание 58. Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу “11218, Friel Place, New York”, от имени “George Clooney”.В качестве первичного ключа (id) укажите количество записей в таблице + 1.

INSERT INTO Reviews SET COUNT(*)+1 FROM Reviews AS a), rating=5, reservation_id= (SELECT r.id FROM Reservations AS r JOIN Rooms ON r.room_id=Rooms.id JOIN Users ON r.user_id=Users.id WHERE address='11218, Friel Place, New York' AND name='George Clooney');

Задание 59. Вывести пользователей, указавших Белорусский номер телефона ? Телефонный код Белоруссии +375.

SELECT * FROM Users WHERE phone_number LIKE '+375%';

Задание 60. Выведите идентификаторы преподавателей, которые хотя бы один раз за всё время преподавали в каждом из одиннадцатых классов.

SELECT teacher FROM Schedule JOIN Class ON Schedule.class=Class.id WHERE name LIKE '11%' GROUP BY teacher HAVING COUNT(DISTINCT name) = 2;

Задание 61. Выведите список комнат, которые были зарезервированы в течение 12 недели 2020 года.

SELECT DISTINCT Rooms.* FROM Rooms JOIN Reservations ON Rooms.id=Reservations.room_id WHERE WEEK(start_date, 1) = 12 AND YEAR(start_date)=2020;

Задание 62. Вывести в порядке убывания популярности доменные имена 2-го уровня, используемые пользователями для электронной почты.
Полученный результат необходимо дополнительно отсортировать по возрастанию названий доменных имён.

SELECT SUBSTRING_INDEX(email,'@',-1) AS domain, COUNT(SUBSTRING_INDEX(email,'@',-1)) AS count FROM Users GROUP BY domain ORDER BY count DESC, domain;

Задание 63. Выведите отсортированный список (по возрастанию) имен студентов в виде Фамилия.И.О.

SELECT CONCAT(last_name, '.', LEFT(first_name, 1), '.', LEFT(middle_name, 1), '.') AS name FROM Student ORDER BY last_name, first_name;

Задание 64. Выведите имена всех пар пассажиров, летевших вместе на одном рейсе два или более раз, и количество таких совместных рейсов.
В passengerName1 разместите имя пассажира с наименьшим идентификатором.

SELECT passengerName1, passengerName2, COUNT(tr1) AS COUNT FROM (SELECT Passenger.id AS p1, name AS passengerName1, trip AS tr1 FROM Passenger INNER JOIN Pass_in_trip ON Passenger.id = Pass_in_trip.passenger GROUP BY Passenger.id, name, trip) AS UP1 INNER JOIN (SELECT Passenger.id AS p2, name AS passengerName2, trip AS tr2 FROM Passenger INNER JOIN Pass_in_trip ON Passenger.id = Pass_in_trip.passenger GROUP BY Passenger.id, name, trip) AS UP2 ON UP1.tr1 = UP2.tr2 WHERE (p11);

Задание 65. Необходимо вывести рейтинг для комнат, которые хоть раз арендовали, как среднее значение рейтинга отзывов округленное до целого вниз.

SELECT room_id, FLOOR(AVG(rating)) AS rating FROM Reservations JOIN Reviews ON Reservations.id=Reviews.reservation_id GROUP BY room_id ORDER BY rating DESC; -- Сортировка не обязательна по условию задачи

Задание 66. Вывести список комнат со всеми удобствами (наличие ТВ, интернета, кухни и кондиционера), а также общее количество дней и сумму за все дни аренды каждой из таких комнат.
Если комната не сдавалась, то количество дней и сумму вывести как 0.

SELECT home_type, address, IFNULL(SUM(TIMESTAMPDIFF(DAY,start_date,end_date)), 0) AS days, IFNULL(SUM(total), 0) AS total_fee FROM Rooms LEFT JOIN Reservations ON Rooms.id=Reservations.room_id WHERE (has_tv, has_internet, has_kitchen, has_air_con) = (1,1,1,1) GROUP BY Rooms.id;

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.

IvanPadoltsev/SQL-Academy

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 show

Name 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

d86953d Jun 7, 2021

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time
June 7, 2021 17:29
June 7, 2021 17:32

README.md

Задание 1: Вывести имена всех когда-либо обслуживаемых пассажиров авиакомпаний SELECT name from Passenger

Задание 2: Вывести названия всеx авиакомпаний SELECT name FROM Company;

Задание 3: Вывести все рейсы, совершенные из Москвы SELECT * FROM Trip WHERE town_from = ‘Moscow’;

Задание 4: Вывести имена людей, которые заканчиваются на «man» SELECT name FROM Passenger WHERE name LIKE ‘%man’;

Задание 5: Вывести количество рейсов, совершенных на TU-134 SELECT DISTINCT COUNT(‘plane’) AS count FROM Trip WHERE plane LIKE ‘TU-134’;

Задание 6: Какие компании совершали перелеты на Boeing SELECT Company.name FROM Trip LEFT JOIN Company ON Company.id = Trip.company WHERE plane = ‘Boeing’ GROUP BY company;

Задание 7: Вывести все названия самолётов, на которых можно улететь в Москву (Moscow) SELECT plane FROM Trip WHERE town_to = ‘Moscow’ GROUP BY plane;

Задание 8: В какие города можно улететь из Парижа (Paris) и сколько времени это займёт? SELECT town_to, TIMEDIFF(time_in, time_out) AS flight_time FROM Trip WHERE town_from = ‘Paris’;

Задание 9: SELECT name FROM Company AS c LEFT JOIN Trip AS t ON c.id = t.company WHERE t.town_from = ‘Vladivostok’;

Задание 10: Вывести вылеты, совершенные с 10 ч. по 14 ч. 1 января 1900 г. SELECT * FROM Trip WHERE time_out BETWEEN ‘1900-01-01T10:00:00.000Z’ AND ‘1900-01-01T14:00:00.000Z’;

Задание 11: Вывести пассажиров с самым длинным именем SELECT name FROM Passenger ORDER BY LENGTH(name) DESC LIMIT 1;

Задание 12: Вывести id и количество пассажиров для всех прошедших полётов SELECT trip, COUNT(passenger) AS count FROM Pass_in_trip GROUP BY trip;

Задание 13: Вывести имена людей, у которых есть полный тёзка среди пассажиров SELECT name FROM Passenger GROUP BY name HAVING COUNT(*) > 1;

Задание 14: В какие города летал Bruce Willis SELECT t.town_to FROM Trip AS t JOIN Pass_in_trip AS pit ON t.id = trip JOIN Passenger AS p ON p.id = passenger WHERE name = ‘Bruce Willis’;

Задание 15: Во сколько Стив Мартин (Steve Martin) прилетел в Лондон (London) SELECT t.time_in FROM Trip AS t JOIN Pass_in_trip AS pit ON t.id = trip JOIN Passenger AS p ON p.id = passenger WHERE name = ‘Steve Martin’ AND town_to = ‘London’;

Задание 16: Вывести отсортированный по количеству перелетов (по убыванию) и имени (по возрастанию) список пассажиров, совершивших хотя бы 1 полет. SELECT p.name, COUNT(passenger) AS count FROM Trip AS t JOIN Pass_in_trip AS pit ON t.id = trip JOIN Passenger AS p ON p.id = passenger GROUP BY p.name HAVING count >= 1 ORDER BY count DESC, p.name ASC;

Задание 17: Определить, сколько потратил в 2005 году каждый из членов семьи SELECT member_name, status, SUM(unit_price * amount) as costs FROM Payments AS p JOIN FamilyMembers AS fm ON p.family_member = fm.member_id WHERE date LIKE ‘2005%’ GROUP BY family_member;

Задание 18: Узнать, кто старше всех в семьe SELECT member_name FROM FamilyMembers WHERE birthday = (SELECT MIN(birthday) FROM FamilyMembers);

Задание 19: Определить, кто из членов семьи покупал картошку (potato) SELECT status FROM FamilyMembers AS fm JOIN Payments AS p ON fm.member_id = p.family_member JOIN Goods AS g ON p.good = g.good_id WHERE good_name LIKE ‘potato’ GROUP BY status;

Задание 20: Сколько и кто из семьи потратил на развлечения (entertainment). Вывести статус в семье, имя, сумму SELECT status, member_name, SUM(unit_price*amount) AS costs FROM FamilyMembers AS fm JOIN Payments AS p ON fm.member_id = p.family_member JOIN Goods AS g ON p.good = g.good_id JOIN GoodTypes as gp ON g.type = gp.good_type_id WHERE good_type_name = ‘entertainment’ GROUP BY family_member;

Задание 21: Определить товары, которые покупали более 1 раза SELECT good_name FROM Payments AS p JOIN Goods as g ON p.good = g.good_id GROUP BY good HAVING COUNT(good_name) > 1;

Задание 22: Найти имена всех матерей (mother) SELECT member_name FROM FamilyMembers WHERE status = ‘mother’;

Задание 23: SELECT good_name, unit_price FROM Payments AS p JOIN Goods AS g ON p.good = g.good_id JOIN GoodTypes as gp ON g.type = gp.good_type_id WHERE good_type_name = ‘delicacies’ LIMIT 1;

Задание 24: Определить кто и сколько потратил в июне 2005 SELECT member_name, SUM(unit_price*amount) as costs FROM Payments as p JOIN FamilyMembers as fm ON p.family_member = fm.member_id WHERE date LIKE ‘2005-06%’ GROUP BY member_name;

Задание 25: Определить, какие товары имеются в таблице Goods, но не покупались в течение 2005 года SELECT good_name FROM Goods
LEFT JOIN Payments ON Goods.good_id = Payments.good AND YEAR(Payments.date) = 2005 WHERE Payments.good IS NULL GROUP BY good_id;

 ЕЩЕ ОДНО РЕШЕНИЕ: 

SELECT good_name, good_id, good, date FROM Goods as g LEFT OUTER JOIN Payments as p ON g.good_id = p.good WHERE date IS NULL OR date NOT LIKE ‘2005%’ ORDER BY good;

Задание 26: Определить группы товаров, которые не приобретались в 2005 году ГРУППЫ, ТОВАРЫ, КОГДА ПРИОБРЕТАЛИСЬ: SELECT good_type_name, good_name, good_id, good, payment_id, date FROM Goods JOIN Payments ON Goods.good_id = Payments.good JOIN GoodTypes ON GoodTypes.good_type_id = Goods.type;

РЕШЕНИЕ: SELECT good_type_name FROM GoodTypes WHERE good_type_id NOT IN (SELECT good_type_id FROM Goods JOIN Payments ON Goods.good_id = Payments.good AND YEAR(date) = 2005 JOIN GoodTypes ON GoodTypes.good_type_id = Goods.type);

Задание 27: Узнать, сколько потрачено на каждую из групп товаров в 2005 году. Вывести название группы и сумму SELECT good_type_name, SUM(amount*unit_price) AS costs FROM GoodTypes JOIN Goods ON good_type_id = type JOIN Payments ON good = good_id AND YEAR(date) = 2005 GROUP BY good_type_name;

Задание 28: Сколько рейсов совершили авиакомпании с Ростова (Rostov) в Москву (Moscow) ? SELECT COUNT(id) AS count FROM Trip WHERE town_from = ‘Rostov’ AND town_to = ‘Moscow’;

Задание 29: Выведите имена пассажиров улетевших в Москву (Moscow) на самолете TU-134 SELECT DISTINCT name FROM Passenger JOIN Pass_in_trip ON Passenger.id = Pass_in_trip.passenger JOIN Trip ON Pass_in_trip.trip = Trip.id WHERE plane = ‘TU-134’ AND town_to = ‘Moscow’;

Задание 30: Выведите нагруженность (число пассажиров) каждого рейса (trip). Результат вывести в отсортированном виде по убыванию нагруженности. SELECT trip, COUNT(passenger) AS count FROM Passenger JOIN Pass_in_trip ON Passenger.id = Pass_in_trip.passenger JOIN Trip ON Pass_in_trip.trip = Trip.id GROUP BY trip ORDER BY count DESC;

Задание 31: Вывести всех членов семьи с фамилией Quincey. SELECT * FROM FamilyMembers WHERE member_name LIKE ‘%Quincey’;

Задание 32: Вывести средний возраст людей (в годах), хранящихся в базе данных. Результат округлите до целого в меньшую сторону. SELECT FLOOR(AVG(FLOOR(DATEDIFF(NOW(), birthday)/365))) AS age FROM FamilyMembers;

Задание 33: Найдите среднюю стоимость икры. В базе данных хранятся данные о покупках красной (red caviar) и черной икры (black caviar). SELECT AVG(unit_price) AS cost FROM Payments JOIN Goods ON good=good_id WHERE good_name = ‘red caviar’ OR good_name = ‘black caviar’;

Задание 34: Сколько всего 10-ых классов? SELECT COUNT(name) AS count FROM Class WHERE name LIKE ‘10%’;

Задание 35: Сколько различных кабинетов школы использовались 2.09.2019 в образовательных целях ? SELECT DISTINCT COUNT(classroom) AS count FROM Schedule WHERE date LIKE ‘2019-09-02%’;

Задание 36: Выведите информацию об обучающихся живущих на улице Пушкина (ul. Pushkina)? SELECT * FROM Student WHERE address LIKE ‘%Pushkina%’;

Задание 37: Сколько лет самому молодому обучающемуся ? SELECT ROUND(MIN(DATEDIFF(NOW(), birthday)/365)) AS year FROM Student; SELECT FLOOR(MIN(DATEDIFF(NOW(), birthday)/365)) AS year FROM Student;

Задание 38: SELECT COUNT(1) As count FROM Student WHERE first_name LIKE ‘Anna’;

  1. SELECT COUNT(class) AS count FROM Student_in_class JOIN Class ON Class.id=class WHERE name LIKE ’10 B’;
  2. SELECT COUNT(class) AS count FROM Student_in_class JOIN Class ON Class.id=class AND name = ’10 B’;

Задание 40: Выведите название предметов, которые преподает Ромашкин П.П. (Romashkin P.P.) ? SELECT DISTINCT(Subject.name) AS subjects FROM Subject JOIN Schedule ON Subject.id=Schedule.subject JOIN Teacher ON Teacher.id=Schedule.teacher AND last_name=’Romashkin’;

Задание 41: Во сколько начинается 4-ый учебный предмет по расписанию ? SELECT start_pair FROM Timepair WHERE start_pair FROM Timepair LIMIT 3, 1; SELECT start_pair FROM Timepair LIMIT 1 OFFSET 3;

Задание 42: Сколько времени обучающийся будет находиться в школе, учась со 2-го по 4-ый уч. предмет ? SELECT DISTINCT TIMEDIFF((SELECT end_pair FROM Timepair WHERE (SELECT start_pair FROM Timepair WHERE as time FROM Timepair;

Задание 43: Выведите фамилии преподавателей, которые ведут физическую культуру (Physical Culture). Остортируйте преподавателей по фамилии. SELECT last_name FROM Teacher JOIN Schedule ON Teacher.id=Schedule.teacher JOIN Subject ON Subject.id=Schedule.subject WHERE Subject.name=’Physical Culture’ ORDER BY last_name ASC;

Задание 44: Найдите максимальный возраст (колич. лет) среди обучающихся 10 классов ? SELECT FLOOR(MAX((DATEDIFF(NOW(), birthday)/365))) AS max_year FROM Student JOIN Student_in_class ON Student.id=Student_in_class.student JOIN Class ON Class.id=Student_in_class.class WHERE Class.name LIKE ‘10%’;

 Задание 45: Какой(ие) кабинет(ы) пользуются самым большим спросом? 

SELECT classroom, COUNT(classroom) as count FROM Schedule GROUP BY classroom HAVING COUNT() > 4 ORDER BY COUNT() DESC; — какие кабинеты в топе?

Задание 46: В каких классах введет занятия преподаватель «Krauze» ? SELECT DISTINCT name FROM Class JOIN Schedule ON Class.id=Schedule.class JOIN Teacher ON Teacher.id=Schedule.teacher WHERE last_name = ‘Krauze’;

Задание 47: Сколько занятий провел Krauze 30 августа 2019 г.? SELECT COUNT(teacher) AS count FROM Schedule JOIN Teacher ON Teacher.id=Schedule.teacher AND last_name = ‘Krauze’ WHERE date LIKE ‘2019-08-30%’;

Задание 48: Выведите заполненность классов в порядке убывания SELECT name, COUNT(class) as count FROM Class JOIN Student_in_class ON Class.id=Student_in_class.class GROUP BY name ORDER BY COUNT(*) DESC;

Задание 49: Какой процент обучающихся учится в 10 A классе ? SELECT (COUNT(*)*100/(SELECT COUNT(Student.id) as count FROM Student JOIN Student_in_class ON Student.id=Student_in_class.student)) AS percent FROM Student_in_class JOIN Class ON Class.id=Student_in_class.class AND name = ’10 A’;

Задание 50: Какой процент обучающихся родился в 2000 году? Результат округлить до целого в меньшую сторону. SELECT FLOOR((COUNT(*)*100/(SELECT COUNT(Student.id) as count FROM Student JOIN Student_in_class ON Student.id=Student_in_class.student))) AS percent FROM Student WHERE YEAR(birthday) = 2000;

Задание 51: Добавьте товар с именем «Cheese» и типом «food» в список товаров (Goods). INSERT INTO Goods(good_id, good_name, type) VALUES (17, ‘Cheese’, 2);

Задание 52: Добавьте в список типов товаров (GoodTypes) новый тип «auto». INSERT INTO GoodTypes(good_type_id, good_type_name) VALUES (9, ‘auto’);

Задание 53: Измените имя «Andie Quincey» на новое «Andie Anthony». UPDATE FamilyMembers SET member_name=’Andie Anthony’ WHERE member_id=3;

Задание 54: Удалить всех членов семьи с фамилией «Quincey». DELETE FROM FamilyMembers WHERE member_name LIKE ‘%Quincey’;

Задание 55: Удалить компании, совершившие наименьшее количество рейсов. SELECT name, COUNT(company) as company FROM Trip JOIN Company ON Company.id=Trip.company GROUP BY name; DELETE FROM Company WHERE FROM Company WHERE FROM Company WHERE >

Задание 56: Удалить все перелеты, совершенные из Москвы (Moscow). DELETE FROM Trip WHERE town_from LIKE ‘%Moscow’;

Задание 57: Перенести расписание всех занятий на 30 мин. вперед. UPDATE Timepair SET start_pair = DATE_ADD(start_pair, INTERVAL 30 MINUTE); UPDATE Timepair SET end_pair = DATE_ADD(end_pair, INTERVAL 30 MINUTE);

Задание 58: Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу «11218, Friel Place, New York», от имени «George Clooney» SELECT Users.name, Reservations.* FROM Reservations JOIN Rooms ON Rooms.id=Reservations.room_id JOIN Users ON Users.id=Reservations.user_id WHERE address = ‘11218, Friel Place, New York’

INSERT INTO Reviews (id, reservation_id, rating) VALUES (23, 2, 5);

Задание 59: Вывести пользователей,указавших Белорусский номер телефона ? Телефонный код Белоруссии +375. SELECT * FROM Users WHERE phone_number LIKE ‘+375%’;

 Задание 60: Выведите идентификаторы преподавателей, которые хотя бы один раз за всё время преподавали в каждом из одиннадцатых классов. 

SELECT teacher FROM Schedule JOIN Teacher ON Teacher.id=Schedule.teacher JOIN Subject ON Subject.id=Schedule.subject JOIN Class ON Class.id=Schedule.class WHERE Class.name IN (’11 A’, ’11 B’) GROUP BY teacher HAVING COUNT(teacher)>=1 ORDER BY teacher;

Задание 61: Выведите список комнат, которые были зарезервированы в течение 12 недели 2020 года. SELECT Rooms.* FROM Rooms JOIN Reservations ON Rooms.id=Reservations.room_id AND YEAR(start_date)=2020 AND YEAR(end_date)=2020 WHERE WEEK(start_date, 1)=12 OR WEEK(end_date, 1)=12;

Задание 62: Вывести в порядке убывания популярности доменные имена 2-го уровня, используемые пользователями для электронной почты. Полученный результат необходимо дополнительно отсортировать по возрастанию названий доменных имён. SELECT SUBSTRING_INDEX(email, ‘@’, -1) as domain, count(*) AS count FROM Users GROUP BY domain ORDER BY count DESC, domain ASC;

Задание 63: Выведите отсортированный список (по возрастанию) имен студентов в виде Фамилия.И.О. SELECT CONCAT(last_name, ‘.’, LEFT(first_name, 1), ‘.’, LEFT(middle_name, 1), ‘.’) AS name FROM Student ORDER BY first_name ASC;

 Задание 64: Выведите имена всех пар пассажиров, летевших вместе на одном рейсе два или более раз, и количество таких совместных рейсов. В passengerName1 разместите имя пассажира с наименьшим идентификатором. 

Задание 65: Необходимо вывести рейтинг для комнат, которые хоть раз арендовали, как среднее значение рейтинга отзывов округленное до целого вниз. SELECT room_id, FLOOR(AVG(rating)) AS rating FROM Reservations JOIN Reviews ON Reviews.reservation_id=Reservations.id GROUP BY room_id;

Задание 66: Вывести список комнат со всеми удобствами (наличие ТВ, интернета, кухни и кондиционера), а также общее количество дней и сумму за все дни аренды каждой из таких комнат. SELECT home_type, address, COALESCE(SUM(DATEDIFF(end_date, start_date)), 0) as days, COALESCE(SUM(Reservations.total), 0) AS total_fee FROM Reservations RIGHT JOIN Rooms ON Rooms.id=Reservations.room_id WHERE has_tv !=0 AND has_internet !=0 AND has_kitchen !=0 AND has_air_con !=0 GROUP BY address, home_type;

Задачи¶

Тут я складываю решение задач по SQL, может кому-то понадобится.

Именно для PostgreSQL есть отдельный раздел тут

Cсылки на задачи¶

  • SQL. Занимательные задачи — отличный список задач с схемой HR отдела. Затрагивает очень много кейсов — от фильтрация, группировка, агрегация. Мастхев для прорешивания в первую очередь.
  • SQL-EX — гигабазовый онлаин тренажер с >500 задач.
  • SQL Academy — ещё один онлаин тренажер.
  • Leetcode — Задачи по БД на литкоде.
  • Интерактивный тренажер по SQL, Stepik — подойдет прям для новичков
  • SQLBolt

Решения¶

Задачи с sql-academy.org¶

  1. В какие города можно улететь из Парижа (Paris) и сколько времени это займёт?
    Задача на знание встроенных функций, решается при помощи TIMEDIFF :
 SELECT town_to, TIMEDIFF(time_in, time_out) as flight_time FROM trip WHERE town_from = 'Paris' 
 SELECT * FROM trip WHERE time_out BETWEEN "1900-01-01T10:00:00" AND "1900-01-01T14:00:00" 
 SELECT name FROM passenger WHERE LENGTH(name) = (SELECT MAX(LENGTH(name)) FROM passenger); 
 SELECT member_name FROM FamilyMembers ORDER BY birthday LIMIT 1 
 SELECT good_name, unit_price FROM Payments JOIN Goods ON Goods.good_id = Payments.good JOIN GoodTypes ON GoodTypes.good_type_id = Goods.type WHERE GoodTypes.good_type_name = "delicacies" ORDER BY unit_price DESC LIMIT 1 
 SELECT fm.status, fm.member_name, SUM(p.amount * p.unit_price) as costs FROM FamilyMembers as fm JOIN Payments AS p ON fm.member_id = p.family_member JOIN Goods as g ON g.good_id = p.good JOIN GoodTypes AS gt ON gt.good_type_id = g.type WHERE gt.good_type_name = "entertainment" GROUP BY fm.status, fm.member_name 
 SELECT g.good_name FROM Payments as p JOIN Goods as g ON p.good = g.good_id GROUP BY g.good_name HAVING COUNT(good_name) > 1 
 SELECT name FROM Passenger GROUP BY name HAVING COUNT(name) > 1 
 SELECT name, count(pt.id) as count FROM Pass_in_trip AS pt JOIN Passenger AS p ON pt.passenger = p.id GROUP BY pt.passenger ORDER BY count desc, name asc 
 SELECT member_name, status, SUM(p.amount * p.unit_price) as costs FROM Payments AS p JOIN FamilyMembers AS fm ON fm.member_id = p.family_member WHERE p.date BETWEEN "2005-01-01" AND "2005-12-31" GROUP BY p.family_member 
 SELECT fm.member_name, sum(p.amount * p.unit_price) AS costs FROM Payments AS p JOIN FamilyMembers AS fm ON fm.member_id = p.family_member WHERE p.date BETWEEN "2005-06-01" AND "2005-06-30" GROUP BY p.family_member 
 SELECT good_name FROM Goods AS g WHERE g.good_id NOT IN ( SELECT good FROM Payments AS p WHERE YEAR(p.date) = 2005 ) 
 SELECT good_type_name FROM GoodTypes WHERE good_type_name NOT IN ( SELECT DISTINCT gt.good_type_name FROM Payments as p JOIN Goods AS g ON p.good = g.good_id JOIN GoodTypes AS gt ON g.type = gt.good_type_id WHERE YEAR(p.date) = 2005 ) 
 SELECT gt.good_type_name, SUM(p.amount * p.unit_price) as costs FROM Payments AS p JOIN Goods AS g ON p.good = g.good_id JOIN GoodTypes AS gt ON g.type = gt.good_type_id WHERE YEAR(p.date) = 2005 GROUP BY gt.good_type_id 
 SELECT DISTINCT p.name FROM Trip AS t JOIN Pass_in_trip AS pt ON t.id = pt.trip JOIN Passenger AS p ON pt.passenger = p.id WHERE t.town_to = "Moscow" AND t.plane = "TU-134" 
 SELECT pt.trip, count(pt.trip) as count from Pass_in_trip AS pt GROUP BY pt.trip ORDER BY count(pt.trip) DESC 
 SELECT * FROM FamilyMembers WHERE member_name LIKE "% Quincey" 
 SELECT AVG(p.unit_price) as cost FROM Payments AS p JOIN Goods AS g ON p.good = g.good_id WHERE g.good_name IN ("red caviar", "black caviar") 
 SELECT COUNT(classroom) as count FROM Schedule WHERE date = "2019-09-02" 
 SELECT MIN(TIMESTAMPDIFF(YEAR, birthday, CURRENT_DATE)) AS year FROM Student 
 SELECT FLOOR(AVG(TIMESTAMPDIFF(YEAR, birthday, CURRENT_DATE))) AS age FROM FamilyMembers 
 SELECT s.name as subjects FROM Subject AS s JOIN Schedule AS sc ON sc.subject = s.id JOIN teacher AS t On sc.teacher = t.id WHERE t.last_name = "Romashkin" 
 SELECT DISTINCT TIMEDIFF( ( SELECT end_pair FROM Timepair WHERE id = 4 ), ( SELECT start_pair FROM Timepair WHERE id = 2 ) ) as time from Timepair 
 SELECT last_name from Teacher AS t JOIN Schedule AS sc ON sc.teacher = t.id JOIN Subject as s ON sc.subject = s.id WHERE s.name = "Physical Culture" ORDER BY t.last_name 
 SELECT MAX( TIMESTAMPDIFF(YEAR, s.birthday, CURRENT_DATE) ) as max_year FROM Student_in_class AS sc JOIN Class AS c ON sc.class = c.id JOIN Student AS s ON sc.student = s.id WHERE c.name LIKE "10%" 
 SELECT classroom FROM Schedule GROUP BY classroom HAVING COUNT(classroom) = ( SELECT COUNT(classroom) FROM Schedule GROUP BY classroom ORDER BY classroom DESC LIMIT 1 ) 
 SELECT DISTINCT name FROM Class AS c JOIN Schedule AS sc ON sc.class = c.id JOIN Teacher AS t ON sc.teacher = t.id WHERE t.last_name = "Krauze" 
 SELECT count(id) as count FROM Schedule WHERE date = "2019-08-30" AND teacher = ( SELECT id FROM Teacher WHERE last_name = "Krauze" ) 
 SELECT c.name as name, count(c.id) as count FROM Student_in_class AS sc JOIN Class AS c ON sc.class = c.id JOIN Student AS s ON sc.student = s.id GROUP BY c.name ORDER BY count(c.id) DESC 
 SELECT COUNT(student) * 100 / ( SELECT COUNT(student) FROM Student_in_class ) as percent FROM Student_in_class AS si JOIN Class AS c ON si.class = c.id WHERE c.name = "10 A" 
 SELECT FLOOR(COUNT(id) * 100 / ( SELECT COUNT(id) FROM Student )) as percent FROM Student WHERE YEAR(birthday) = 2000 
 SELECT sc.teacher FROM Schedule AS sc JOIN Class AS c ON c.id = sc.class WHERE c.name LIKE "11%" GROUP BY sc.teacher HAVING COUNT(DISTINCT c.name) = 2 
 DELETE FROM Company WHERE Company.id IN ( SELECT company FROM Trip GROUP BY company HAVING COUNT(id) = (SELECT MIN(count) FROM (SELECT count(*) as count FROM Trip GROUP BY Trip.company) as min ) ) 
 INSERT INTO Reviews SET id = (SELECT COUNT(*)+1 FROM Reviews as a), reservation_id = ( SELECT Reservations.id FROM Reservations JOIN Users ON Users.id = Reservations.user_id JOIN Rooms ON Rooms.id = Reservations.room_id WHERE Users.name = "George Clooney" AND Rooms.address = "11218, Friel Place, New York" ), rating = 5 
 UPDATE Timepair SET start_pair = start_pair + INTERVAL 30 MINUTE, end_pair = end_pair + INTERVAL 30 MINUTE 
 SELECT Rooms.* FROM Rooms JOIN Reservations ON Reservations.room_id = Rooms.id WHERE WEEK(Reservations.start_date, 1) = 12 AND YEAR(start_date) = 2020 
 SELECT REGEXP_SUBSTR(email, '(?<=@)[^.]*.[^.]*(?=\.).') as domain, COUNT(REGEXP_SUBSTR(email, '(?<=@)[^.]*.[^.]*(?=\.).')) as count FROM Users GROUP BY domain ORDER BY count DESC, domain 
 SELECT Rooms.home_type, Rooms.address, IFNULL(SUM(DATEDIFF(Reservations.end_date, Reservations.start_date)), 0) as days, IFNULL(SUM(total), 0) as total_fee FROM Rooms LEFT JOIN Reservations ON Rooms.id = Reservations.room_id WHERE Rooms.has_tv = true AND has_internet = true AND has_kitchen = true AND has_air_con = true GROUP BY Rooms.id 
 SELECT owner_id, IFNULL(SUM(Reservations.total), 0) as total_earn FROM Rooms LEFT JOIN Reservations ON Reservations.room_id = Rooms.id GROUP BY owner_id 
 SELECT room_id, COUNT(room_id) as count FROM Reservations GROUP BY room_id HAVING MOD(count, 2) 
 SELECT YEAR(start_date) as year, MONTH(start_date) as month, COUNT(*) as amount FROM Reservations GROUP BY YEAR(start_date), MONTH(start_date) ORDER BY YEAR(start_date) ASC 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *