SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
-- Создание таблицы country CREATE TABLE country ( countryID INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); -- Создание таблицы artist CREATE TABLE artist ( artistID INT PRIMARY KEY, countryID INT, surname VARCHAR(50) NOT NULL, name VARCHAR(50) NOT NULL, birthday DATE, death_date DATE, FOREIGN KEY (countryID) REFERENCES country(countryID) ); -- Создание таблицы artwork CREATE TABLE artwork ( artworkID INT PRIMARY KEY, artistID INT, title VARCHAR(200) NOT NULL, created INT, FOREIGN KEY (artistID) REFERENCES artist(artistID) ); -- Создание таблицы exhibition CREATE TABLE exhibition ( exhibitionID INT PRIMARY KEY, title VARCHAR(200) NOT NULL, date DATE, address VARCHAR(200) ); -- Создание таблицы artwork_exhibition CREATE TABLE artwork_exhibition ( artexhID INT PRIMARY KEY, exhibitionID INT, artworkID INT, FOREIGN KEY (exhibitionID) REFERENCES exhibition(exhibitionID), FOREIGN KEY (artworkID) REFERENCES artwork(artworkID) ); -- Заполнение таблицы country INSERT INTO country (countryID, name) VALUES (1, 'Россия'), (2, 'Франция'), (3, 'Италия'); -- Заполнение таблицы artist INSERT INTO artist (artistID, countryID, surname, name, birthday, death_date) VALUES (1, 1, 'Репин', 'Илья', '1844-08-05', '1930-09-29'), (2, 1, 'Кандинский', 'Василий', '1866-12-16', '1944-12-13'), (3, 2, 'Моне', 'Клод', '1840-11-14', '1926-12-05'), (4, 3, 'Да Винчи', 'Леонардо', '1452-04-15', '1519-05-02'), (5, 3, 'Тицман', 'Тицнано', '1488-02-20', '1576-08-27'); -- Заполнение таблицы artwork INSERT INTO artwork (artworkID, artistID, title, created) VALUES (1, 1, 'Иван Грозный и сын его Иван', 1885), (2, 1, 'Не ждали', 1884), (3, 2, 'Композиция VIII', 1923), (4, 2, 'Синий всадник', 1903), (5, 2, 'Синяя гора', 1908), (6, 3, 'Камилла', 1866), (7, 4, 'Тайная вечеря', 1498), (8, 4, 'Витрувианский человек', 1492), (9, 5, 'Успение Богородицы', 1518), (10, 5, 'Венера Урбинская', 1538); -- Заполнение таблицы exhibition INSERT INTO exhibition (exhibitionID, title, date, address) VALUES (1, 'Русская живопись', '2024-03-15', 'ГМИИ имени Пушкина'), (2, 'Эпоха Возрождения', '2024-06-25', 'Новая Третьяковка'), (3, 'Романтизм в искусстве', '2024-09-16', 'Государственный музей изобразительных искусств имени А.С. Пушкина'); -- Заполнение таблицы artwork_exhibition INSERT INTO artwork_exhibition (artexhID, exhibitionID, artworkID) VALUES (1, 1, 1), (2, 1, 2), (3, 1, 3), (4, 1, 4), (5, 1, 5), (6, 2, 6), (7, 2, 7), (8, 2, 8), (9, 2, 9), (10, 2, 10), (11, 3, 3), (12, 3, 9), (13, 3, 10); -- Создаем временную таблицу для подсчета количества картин каждого художника на выставках WITH ArtistArtworkCount AS ( SELECT a.name + ' ' + a.surname AS artist_name, COUNT(ae.artworkID) AS artwork_count FROM artist a JOIN artwork aw ON a.artistID = aw.artistID JOIN artwork_exhibition ae ON aw.artworkID = ae.artworkID GROUP BY a.name, a.surname ) -- Применяем PIVOT для создания отчета SELECT [Илья Репин], [Василий Кандинский], [Клод Моне], [Леонардо Да Винчи], [Тициано Тициан] FROM ArtistArtworkCount PIVOT ( SUM(artwork_count) FOR artist_name IN ( [Илья Репин], [Василий Кандинский], [Клод Моне], [Леонардо Да Винчи], [Тициано Тициан] ) ) AS PivotTable;

Stuck with a problem? Got Error? Ask ChatGPT!

Copy Clear