0% au considerat acest document util (0 voturi)
29 vizualizări4 pagini

Tabele Subquery

Încărcat de

Raluca Lupu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
29 vizualizări4 pagini

Tabele Subquery

Încărcat de

Raluca Lupu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

-- Crearea tabelului Authors

CREATE TABLE Authors (


AuthorID INT PRIMARY KEY,
Name VARCHAR(100)
);

-- Crearea tabelului Books


CREATE TABLE Books (
BookID INT PRIMARY KEY,
Title VARCHAR(100),
AuthorID INT,
Price DECIMAL(10, 2),
YearPublished YEAR,
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);

-- Crearea tabelului Sales


CREATE TABLE Sales (
SaleID INT PRIMARY KEY,
BookID INT,
SaleDate DATE,
Quantity INT,
FOREIGN KEY (BookID) REFERENCES Books(BookID)
);

-- Inserarea datelor în tabelul Authors


INSERT INTO Authors (AuthorID, Name) VALUES
(1, 'Ion Creanga'),
(2, 'Mihai Eminescu'),
(3, 'George Bacovia');
-- Inserarea datelor în tabelul Books
INSERT INTO Books (BookID, Title, AuthorID, Price, YearPublished) VALUES
(1, 'Amintiri din copilarie', 1, 25.00, 1892),
(2, 'Luceafarul', 2, 15.00, 1883),
(3, 'Plumb', 3, 20.00, 1916);

-- Inserarea datelor în tabelul Sales


INSERT INTO Sales (SaleID, BookID, SaleDate, Quantity) VALUES
(1, 1, '2023-01-05', 100),
(2, 2, '2023-02-10', 150),
(3, 3, '2023-03-15', 120),
(4, 1, '2023-04-20', 200);

1. Afișează titlul fiecărei cărți și data celei mai recente vânzări a


acesteia.
SELECT [Link],
(SELECT MAX([Link])
FROM Sales s
WHERE [Link] = [Link]) AS LatestSaleDate
FROM Books b;
2. Identifică cărțile care au un număr de exemplare vândute total peste
media vânzărilor per carte.
SELECT [Link]
FROM Books b
WHERE (SELECT SUM([Link]) FROM Sales s WHERE [Link] = [Link])
>
(SELECT AVG(Quantity) FROM Sales);
3. Identifică titlurile cărților care au un preț peste medie comparativ cu
alte cărți din aceeași categorie.
SELECT [Link], [Link]
FROM Books b1
WHERE [Link] > (SELECT AVG([Link])
FROM Books b2
WHERE [Link] = [Link]);
4. Dorim să selectăm toate titlurile de cărți și numărul total de
exemplare vândute pentru fiecare carte, dar doar pentru acele cărți
care au un număr total de exemplare vândute peste media vânzărilor
tuturor cărților fiecărui autor în parte.
SELECT [Link], SUM([Link]) AS TotalQuantity
FROM Books b
JOIN Sales s ON [Link] = [Link]
WHERE SUM([Link]) > (
SELECT AVG(TotalSalesPerBook) FROM (
SELECT [Link], [Link], SUM([Link]) AS TotalSalesPerBook
FROM Books b2
JOIN Sales s2 ON [Link] = [Link]
GROUP BY [Link], [Link]
) AS AvgSalesPerAuthor WHERE AuthorID = [Link]
)
GROUP BY [Link]
HAVING SUM([Link]) > (
SELECT AVG(TotalSales) FROM (
SELECT SUM([Link]) AS TotalSales
FROM Books b3
JOIN Sales s3 ON [Link] = [Link]
WHERE [Link] = [Link]
GROUP BY [Link]
) AS SalesInfo
);
V2

WITH TotalSalesPerBook AS (
SELECT
[Link],
[Link],
[Link],
SUM([Link]) AS TotalQuantity
FROM
Books b
JOIN Sales s ON [Link] = [Link]
GROUP BY
[Link]
),
AvgSalesPerAuthor AS (
SELECT
[Link],
AVG(TotalQuantity) AS AvgQuantity
FROM
TotalSalesPerBook b
GROUP BY
[Link]
),
FilteredBooks AS (
SELECT
[Link],
[Link]
FROM
TotalSalesPerBook t
JOIN AvgSalesPerAuthor a ON [Link] = [Link]
WHERE
[Link] > [Link]
)
SELECT
*
FROM
FilteredBooks;
5. Afișează numele autorilor care nu au nicio vânzare înregistrată.
SELECT Name
FROM Authors
WHERE AuthorID NOT IN (SELECT DISTINCT [Link]
FROM Sales s
JOIN Books b ON [Link] = [Link]);
6. Identifică autorii a căror total de exemplare vândute depășește
media totală a vânzărilor per autor.
SELECT [Link]
FROM Authors a
WHERE (SELECT SUM([Link])
FROM Sales s
JOIN Books b ON [Link] = [Link]
WHERE [Link] = [Link]) >
(SELECT AVG(TotalSales)
FROM (SELECT SUM([Link]) AS TotalSales
FROM Sales s
JOIN Books b ON [Link] = [Link]
GROUP BY [Link]) AS SalesPerAuthor);

S-ar putea să vă placă și