Skip to content

Instantly share code, notes, and snippets.

@Ppang0405
Created December 21, 2024 15:02
Show Gist options
  • Save Ppang0405/e916cc0d035ccdf9d7e25a3afcceea01 to your computer and use it in GitHub Desktop.
Save Ppang0405/e916cc0d035ccdf9d7e25a3afcceea01 to your computer and use it in GitHub Desktop.
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