Created
December 21, 2024 15:02
-
-
Save Ppang0405/e916cc0d035ccdf9d7e25a3afcceea01 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Exercise answers | |
10. In ra danh sách các sản phẩm (MASP,TENSP) được khách hàng có tên “Nguyen Van A” mua trong tháng 10/2006. | |
SELECT DISTINCT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
JOIN sqlpractices.cthd cthd ON sp.masp = cthd.masp | |
JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
JOIN sqlpractices.khachhang kh ON hd.makh = kh.makh | |
WHERE kh.hoten = 'Nguyen Van A' AND hd.nghd BETWEEN '2006-10-01' AND '2006-10-31'; | |
11. Tìm các số hóa đơn đã mua sản phẩm có mã số “BB01” hoặc “BB02”. | |
SELECT DISTINCT cthd.sohd | |
FROM sqlpractices.cthd cthd | |
WHERE cthd.masp IN ('BB01', 'BB02'); | |
12. Tìm các số hóa đơn đã mua sản phẩm có mã số “BB01” hoặc “BB02”, mỗi sản phẩm mua với số lượng từ 10 đến 20. | |
SELECT DISTINCT cthd.sohd | |
FROM sqlpractices.cthd cthd | |
WHERE cthd.masp IN ('BB01', 'BB02') AND cthd.sl BETWEEN 10 AND 20; | |
13. Tìm các số hóa đơn mua cùng lúc 2 sản phẩm có mã số “BB01” và “BB02”, mỗi sản phẩm mua với số lượng từ 10 đến 20. | |
SELECT cthd1.sohd | |
FROM sqlpractices.cthd cthd1 | |
JOIN sqlpractices.cthd cthd2 ON cthd1.sohd = cthd2.sohd | |
WHERE cthd1.masp = 'BB01' AND cthd2.masp = 'BB02' | |
AND cthd1.sl BETWEEN 10 AND 20 | |
AND cthd2.sl BETWEEN 10 AND 20; | |
14. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” sản xuất hoặc các sản phẩm được bán ra trong ngày 1/1/2007. | |
SELECT DISTINCT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
LEFT JOIN sqlpractices.cthd cthd ON sp.masp = cthd.masp | |
LEFT JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
WHERE sp.nuocsx = 'Trung Quoc' OR hd.nghd = '2007-01-01'; | |
15. In ra danh sách các sản phẩm (MASP,TENSP) không bán được. | |
SELECT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
LEFT JOIN sqlpractices.cthd cthd ON sp.masp = cthd.masp | |
WHERE cthd.masp IS NULL; | |
16. In ra danh sách các sản phẩm (MASP,TENSP) không bán được trong năm 2006. | |
SELECT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
LEFT JOIN sqlpractices.cthd cthd ON sp.masp = cthd.masp | |
LEFT JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
WHERE hd.sohd IS NULL OR hd.nghd NOT BETWEEN '2006-01-01' AND '2006-12-31'; | |
17. In ra danh sách các sản phẩm (MASP,TENSP) do “Trung Quoc” sản xuất không bán được trong năm 2006. | |
SELECT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
LEFT JOIN sqlpractices.cthd cthd ON sp.masp = cthd.masp | |
LEFT JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
WHERE sp.nuocsx = 'Trung Quoc' AND (hd.sohd IS NULL OR hd.nghd NOT BETWEEN '2006-01-01' AND '2006-12-31'); | |
18. Tìm số hóa đơn đã mua tất cả các sản phẩm do Singapore sản xuất. | |
SELECT hd.sohd | |
FROM sqlpractices.hoadon hd | |
JOIN sqlpractices.cthd cthd ON hd.sohd = cthd.sohd | |
JOIN sqlpractices.sanpham sp ON cthd.masp = sp.masp | |
WHERE sp.nuocsx = 'Singapore' | |
GROUP BY hd.sohd | |
HAVING COUNT(DISTINCT cthd.masp) = (SELECT COUNT(*) FROM sqlpractices.sanpham WHERE nuocsx = 'Singapore'); | |
19. Có bao nhiêu hóa đơn không phải của khách hàng đăng ký thành viên mua? | |
SELECT COUNT(*) | |
FROM sqlpractices.hoadon hd | |
LEFT JOIN sqlpractices.khachhang kh ON hd.makh = kh.makh | |
WHERE kh.ngdk IS NULL; | |
20. Có bao nhiêu sản phẩm khác nhau được bán ra trong năm 2006. | |
SELECT COUNT(DISTINCT cthd.masp) | |
FROM sqlpractices.cthd cthd | |
JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
WHERE hd.nghd BETWEEN '2006-01-01' AND '2006-12-31'; | |
21. Cho biết trị giá hóa đơn cao nhất, thấp nhất là bao nhiêu? | |
SELECT MAX(trigia) AS max_trigia, MIN(trigia) AS min_trigia | |
FROM sqlpractices.hoadon; | |
22. Trị giá trung bình của tất cả các hóa đơn được bán ra trong năm 2006 là bao nhiêu? | |
SELECT AVG(trigia) AS avg_trigia | |
FROM sqlpractices.hoadon | |
WHERE nghd BETWEEN '2006-01-01' AND '2006-12-31'; | |
23. Tính doanh thu bán hàng trong năm 2006. | |
SELECT SUM(trigia) AS total_revenue | |
FROM sqlpractices.hoadon | |
WHERE nghd BETWEEN '2006-01-01' AND '2006-12-31'; | |
24. Tìm số hóa đơn có trị giá cao nhất trong năm 2006. | |
SELECT sohd | |
FROM sqlpractices.hoadon | |
WHERE nghd BETWEEN '2006-01-01' AND '2006-12-31' | |
ORDER BY trigia DESC | |
LIMIT 1; | |
25. Tìm họ tên khách hàng đã mua hóa đơn có trị giá cao nhất trong năm 2006. | |
SELECT kh.hoten | |
FROM sqlpractices.hoadon hd | |
JOIN sqlpractices.khachhang kh ON hd.makh = kh.makh | |
WHERE hd.nghd BETWEEN '2006-01-01' AND '2006-12-31' | |
ORDER BY hd.trigia DESC | |
LIMIT 1; | |
26. In ra danh sách 3 khách hàng (MAKH, HOTEN) có doanh số cao nhất. | |
SELECT kh.makh, kh.hoten, SUM(hd.trigia) AS total_sales | |
FROM sqlpractices.khachhang kh | |
JOIN sqlpractices.hoadon hd ON kh.makh = hd.makh | |
GROUP BY kh.makh, kh.hoten | |
ORDER BY total_sales DESC | |
LIMIT 3; | |
27. In ra danh sách các sản phẩm (MASP, TENSP) có giá bán bằng 1 trong 3 mức giá cao nhất. | |
WITH top_prices AS ( | |
SELECT DISTINCT gia | |
FROM sqlpractices.sanpham | |
ORDER BY gia DESC | |
LIMIT 3 | |
) | |
SELECT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
JOIN top_prices tp ON sp.gia = tp.gia; | |
28. In ra danh sách các sản phẩm (MASP, TENSP) do “Thai Lan” sản xuất có giá bằng 1 trong 3 mức giá cao nhất (của tất cả các sản phẩm). | |
WITH top_prices AS ( | |
SELECT DISTINCT gia | |
FROM sqlpractices.sanpham | |
ORDER BY gia DESC | |
LIMIT 3 | |
) | |
SELECT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
JOIN top_prices tp ON sp.gia = tp.gia | |
WHERE sp.nuocsx = 'Thai Lan'; | |
29. In ra danh sách các sản phẩm (MASP, TENSP) do “Trung Quoc” sản xuất có giá bằng 1 trong 3 mức giá cao nhất (của sản phẩm do “Trung Quoc” sản xuất). | |
WITH top_prices AS ( | |
SELECT DISTINCT gia | |
FROM sqlpractices.sanpham | |
WHERE nuocsx = 'Trung Quoc' | |
ORDER BY gia DESC | |
LIMIT 3 | |
) | |
SELECT sp.masp, sp.tensp | |
FROM sqlpractices.sanpham sp | |
JOIN top_prices tp ON sp.gia = tp.gia | |
WHERE sp.nuocsx = 'Trung Quoc'; | |
30. In ra danh sách 3 khách hàng có doanh số cao nhất (sắp xếp theo kiểu xếp hạng). | |
SELECT kh.makh, kh.hoten, SUM(hd.trigia) AS total_sales | |
FROM sqlpractices.khachhang kh | |
JOIN sqlpractices.hoadon hd ON kh.makh = hd.makh | |
GROUP BY kh.makh, kh.hoten | |
ORDER BY total_sales DESC | |
LIMIT 3; | |
31. Tính tổng số sản phẩm do “Trung Quoc” sản xuất. | |
SELECT COUNT(*) | |
FROM sqlpractices.sanpham | |
WHERE nuocsx = 'Trung Quoc'; | |
32. Tính tổng số sản phẩm của từng nước sản xuất. Với từng nước sản xuất, tìm giá bán cao nhất, thấp nhất, trung bình của các sản phẩm. | |
SELECT nuocsx, | |
COUNT(*) AS total_products, | |
MAX(gia) AS max_price, | |
MIN(gia) AS min_price, | |
AVG(gia) AS avg_price | |
FROM sqlpractices.sanpham | |
GROUP BY nuocsx; | |
33. Tính doanh thu bán hàng mỗi ngày. | |
SELECT nghd, SUM(trigia) AS daily_revenue | |
FROM sqlpractices.hoadon | |
GROUP BY nghd | |
ORDER BY nghd; | |
34. Tính tổng số lượng của từng sản phẩm bán ra trong tháng 10/2006. | |
SELECT cthd.masp, SUM(cthd.sl) AS total_quantity | |
FROM sqlpractices.cthd cthd | |
JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
WHERE hd.nghd BETWEEN '2006-10-01' AND '2006-10-31' | |
GROUP BY cthd.masp; | |
35. Tính doanh thu bán hàng của từng tháng trong năm 2006. | |
SELECT EXTRACT(MONTH FROM nghd) AS month, SUM(trigia) AS monthly_revenue | |
FROM sqlpractices.hoadon | |
WHERE nghd BETWEEN '2006-01-01' AND '2006-12-31' | |
GROUP BY month | |
ORDER BY month; | |
36. Tìm hóa đơn có mua ít nhất 4 sản phẩm khác nhau. | |
SELECT hd.sohd | |
FROM sqlpractices.hoadon hd | |
JOIN sqlpractices.cthd cthd ON hd.sohd = cthd.sohd | |
GROUP BY hd.sohd | |
HAVING COUNT(DISTINCT cthd.masp) >= 4; | |
37. Tìm hóa đơn có mua 3 sản phẩm do “Viet Nam” sản xuất (3 sản phẩm khác nhau). | |
SELECT hd.sohd | |
FROM sqlpractices.hoadon hd | |
JOIN sqlpractices.cthd cthd ON hd.sohd = cthd.sohd | |
JOIN sqlpractices.sanpham sp ON cthd.masp = sp.masp | |
WHERE sp.nuocsx = 'Viet Nam' | |
GROUP BY hd.sohd | |
HAVING COUNT(DISTINCT cthd.masp) = 3; | |
38. Tìm khách hàng (MAKH, HOTEN) có số lần mua hàng nhiều nhất. Tháng mấy trong năm 2006, doanh số bán hàng cao nhất? | |
-- Find the customer with the most purchases | |
SELECT kh.makh, kh.hoten, COUNT(hd.sohd) AS purchase_count | |
FROM sqlpractices.khachhang kh | |
JOIN sqlpractices.hoadon hd ON kh.makh = hd.makh | |
GROUP BY kh.makh, kh.hoten | |
ORDER BY purchase_count DESC | |
LIMIT 1; | |
-- Find the month with the highest sales in 2006 | |
SELECT EXTRACT(MONTH FROM nghd) AS month, SUM(trigia) AS monthly_revenue | |
FROM sqlpractices.hoadon | |
WHERE nghd BETWEEN '2006-01-01' AND '2006-12-31' | |
GROUP BY month | |
ORDER BY monthly_revenue DESC | |
LIMIT 1; | |
39. Tìm sản phẩm (MASP, TENSP) có tổng số lượng bán ra thấp nhất trong năm 2006. | |
SELECT cthd.masp, sp.tensp, SUM(cthd.sl) AS total_quantity | |
FROM sqlpractices.cthd cthd | |
JOIN sqlpractices.hoadon hd ON cthd.sohd = hd.sohd | |
JOIN sqlpractices.sanpham sp ON cthd.masp = sp.masp | |
WHERE hd.nghd BETWEEN '2006-01-01' AND '2006-12-31' | |
GROUP BY cthd.masp, sp.tensp | |
ORDER BY total_quantity ASC | |
LIMIT 1; | |
40. Mỗi nước sản xuất, tìm sản phẩm (MASP,TENSP) có giá bán cao nhất. | |
SELECT nuocsx, masp, tensp, MAX(gia) AS max_price | |
FROM sqlpractices.sanpham | |
GROUP BY nuocsx, masp, tensp; | |
41. Tìm nước sản xuất sản xuất ít nhất 3 sản phẩm có giá bán khác nhau. | |
SELECT nuocsx | |
FROM sqlpractices.sanpham | |
GROUP BY nuocsx | |
HAVING COUNT(DISTINCT gia) >= 3; | |
42. Trong 10 khách hàng có doanh số cao nhất, tìm khách hàng có số lần mua hàng nhiều nhất. | |
WITH top_customers AS ( | |
SELECT kh.makh, kh.hoten, SUM(hd.trigia) AS total_sales | |
FROM sqlpractices.khachhang kh | |
JOIN sqlpractices.hoadon hd ON kh.makh = hd.makh | |
GROUP BY kh.makh, kh.hoten | |
ORDER BY total_sales DESC | |
LIMIT 10 | |
) | |
SELECT tc.makh, tc.hoten, COUNT(hd.sohd) AS purchase_count | |
FROM top_customers tc | |
JOIN sqlpractices.hoadon hd ON tc.makh = hd.makh | |
GROUP BY tc.makh, tc.hoten | |
ORDER BY purchase_count DESC | |
LIMIT 1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment