SQL Part 3 - SQL statements for all exercises

 

Order Details Extended, simplified:

 

SELECT OrderID, od.ProductID, ProductName, od.UnitPrice, Quantity, Discount, od.UnitPrice * Quantity AS NondiscountPrice

FROM Products p, [Order Details] od

WHERE p.ProductID = od.ProductID

ORDER BY OrderID;

 

Category Sales for 1997, first quarter only:

 

SELECT DISTINCTROW [Product Sales for 1997].CategoryName, Sum([Product Sales for 1997].ProductSales) AS CategorySales

FROM [Product Sales for 1997]

WHERE ShippedQuarter like "*1"

GROUP BY [Product Sales for 1997].CategoryName;

 

Category Sales for 1997, all quarters, totals greater than $100000 only:

 

SELECT DISTINCTROW [Product Sales for 1997].CategoryName, Sum([Product Sales for 1997].ProductSales) AS CategorySales

FROM [Product Sales for 1997]

GROUP BY [Product Sales for 1997].CategoryName

HAVING Sum(ProductSales) > 100000;

 

Category Sales for 1997, first quarter only, totals greater than $20000:

 

SELECT DISTINCTROW [Product Sales for 1997].CategoryName, Sum([Product Sales for 1997].ProductSales) AS CategorySales

FROM [Product Sales for 1997]

WHERE ShippedQuarter like "*1"

GROUP BY [Product Sales for 1997].CategoryName

HAVING Sum(ProductSales) > 20000;

 

Number of products in the database:

 

SELECT Count(*) AS ProductCount

FROM Products;

 

Number of products by category:

 

SELECT CategoryID, Count(*) AS ProductCount

FROM Products

GROUP BY CategoryID;

 

Average freight by shipper:

 

SELECT ShipVia, Avg(Freight) AS AverageFreight

FROM Orders

GROUP BY ShipVia;

 

Average freight by shipper looking at freight above $75 only:

 

SELECT ShipVia, Avg(Freight) AS AverageFreight

FROM Orders

WHERE Freight > 75

GROUP BY ShipVia;

 

Average freight by shipper greater than $75 (for all freight charges):

 

SELECT ShipVia, Avg(Freight) AS AverageFreight

FROM Orders

GROUP BY ShipVia

HAVING Avg(Freight) > 75;

 

Most popular product:

 

SELECT [Order Details].ProductID, Max([Order Details].Quantity) AS PopularityIndex

FROM [Order Details]

GROUP BY [Order Details].ProductID

ORDER BY Max(Quantity) DESC;

 

or perhaps

 

SELECT [Order Details].ProductID, Sum([Order Details].Quantity) AS PopularitySum

FROM [Order Details]

GROUP BY [Order Details].ProductID

ORDER BY Sum(Quantity) DESC;

 

or perhaps (looking for repeated products)

 

SELECT ProductID, Count(ProductID) AS Repeated

FROM [Order Details]

GROUP BY ProductID

HAVING Count(ProductID) > 1

ORDER BY Count(ProductID) DESC;

 

Same query as previous (repeated products) as created by the Find Duplicates wizard (ORDER BY clause added separately):

 

SELECT First([Order Details].ProductID) AS [ProductID Field], Count([Order Details].ProductID) AS NumberOfDups

FROM [Order Details]

GROUP BY [Order Details].ProductID

HAVING (((Count([Order Details].ProductID))>1))

ORDER BY Count(ProductID) DESC;

 

Repeat instances of product and price in Order Details:

 

SELECT ProductID, UnitPrice

FROM [Order Details]

GROUP BY ProductID, UnitPrice

HAVING Count(ProductID) > 1

AND Count(UnitPrice) > 1;

 

Same query as previous (repeat product and price) using the Find Duplicates wizard:

 

SELECT First([Order Details].ProductID) AS [ProductID Field], First([Order Details].UnitPrice) AS [UnitPrice Field], Count([Order Details].ProductID) AS NumberOfDups

FROM [Order Details]

GROUP BY [Order Details].ProductID, [Order Details].UnitPrice

HAVING (((Count([Order Details].ProductID))>1) AND ((Count([Order etails].UnitPrice))>1));

 

Customers located in the same city as a supplier (subquery):

 

SELECT CompanyName, City, Country

FROM Customers

WHERE City IN

            (SELECT City

            FROM Suppliers);

 

Customers located in the same city as a supplier (join):

 

SELECT Customers.CompanyName, Customers.City, Customers.Country

FROM Customers, Suppliers

WHERE Customers.City =Suppliers.City;


Products with price lower than average


SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice <
   (SELECT AVG(UnitPrice) From Products)
ORDER BY UnitPrice DESC;


Products with price within 10% of average:


SELECT ProductName, UnitPrice
FROM Products
WHERE UnitPrice
   Between (SELECT AVG([UnitPrice]) -AVG([UnitPrice])*0.1 From Products)
   And (SELECT AVG([UnitPrice])+AVG([UnitPrice])*0.1 From Products)
ORDER BY UnitPrice DESC;

 

Freight charges greater than average:

 

SELECT ShipVia, Freight

FROM Orders

WHERE Freight >

            (SELECT Avg(Freight)

            FROM Orders);

 

Number of higher-than-average charges by each shipper:

 

SELECT ShipVia, Avg(Freight) AS AvgFreight, count(*) AS Shipments

FROM Orders

WHERE Freight >

            (SELECT Avg(Freight)

            FROM Orders)

GROUP BY ShipVia;

 

Suppliers who do not provide dairy products:

 

SELECT CompanyName

FROM Suppliers AS s

WHERE NOT EXISTS

            (SELECT *

            FROM Products p, Categories c

            WHERE p.SupplierID = s.SupplierID

            AND p.CategoryID = c.CategoryID

            AND CategoryName LIKE "*Dairy*");

 

Customers located in the same city:

 

SELECT DISTINCT c1.ContactName, c1.Address, c1.City

FROM Customers AS c1, Customers AS c2

WHERE c1.City = c2.City

AND c1.ContactName <> c2.ContactName

ORDER BY c1.City, c1.ContactName;