Nền tảng Kiến thức - Hành trang tới Tương lai
Card image

Chương 7-Bài 1. Truy vấn dữ liệu cho Nghiệp vụ Bán hàng

Tác giả: Dương Nguyễn Phú Cường #2671
Ngày đăng: Hồi xưa đó
Lượt xem: 1090

1. Tìm top 3 Sản phẩm đạt Doanh thu cao nhất trong 3 tháng gần đây?
2. Liệt kê Danh sách các nơi giao hàng mà Hệ thống đã xử lý?
3. Tìm top 3 Đơn hàng có ngày giao đến khách hàng chậm nhất (tính theo đơn vị là ngày; từ ngày Khách đặt hàng - đến ngày Giao hàng đến tay Khách)?
4. Thống kê Danh sách các Sản phẩm chưa được cập nhật Hình ảnh (không có bất kỳ hình ảnh nào) để Nhân viên cập nhật Hình ảnh bổ sung.
5. Tìm khách hàng Lớn tuổi nhất trong Hệ thống?
6. Thống kê danh sách các Sản phẩm nào đã bán gần hết số lượng (số lượng < 10 xem như gần hết), để chủ SHOP nhập thêm hàng về?
7. Thống kê danh sách các Sản phẩm đang bán lỗ vốn (giá hiện tại < giá cũ)? Cần hiển thị thông tin như sau:
Tên Nhà sản xuất Tên Loại sản phẩm Tên Sản phẩm Giá cũ Giá hiện tại Chênh lệch giá
... ... ... ... ... ...
8. Thống kê danh sách các Sản phẩm đang Khuyến mãi trong thời gian 2 tháng/60 ngày (tính từ ngày hiện tại)?
9. Thống kê danh sách các Đơn hàng chưa được xử lý xong (Trạng thái = 0), sắp xếp Giảm dần theo Tổng thành tiền Đơn hàng?
10. Hình thức thanh toán phổ biến nhất là gì? Tổng doanh số đạt được của Hình thức thanh toán này là bao nhiêu?
Giải:
-- 1. Tìm top 3 Sản phẩm đạt Doanh thu cao nhất trong 3 tháng gần đây?
SELECT sp.sp_ten, SUM(spddh.sp_dh_soluong * spddh.sp_dh_dongia) TongThanhTien
FROM sanpham_dondathang spddh
JOIN dondathang ddh ON spddh.dh_ma = ddh.dh_ma
JOIN sanpham sp ON spddh.sp_ma = sp.sp_ma
WHERE ddh.dh_ngaylap >= DATE_SUB(NOW(), INTERVAL 6 MONTH)
GROUP BY sp.sp_ten
ORDER BY SUM(spddh.sp_dh_soluong * spddh.sp_dh_dongia) DESC
LIMIT 0,3;

-- 2. Liệt kê Danh sách các nơi giao hàng mà Hệ thống đã xử lý?
SELECT DISTINCT dh_noigiao
FROM dondathang;

-- 3. Tìm top 3 Đơn hàng có ngày giao đến khách hàng chậm nhất (tính theo đơn vị là ngày; từ ngày Khách đặt hàng – đến ngày Giao hàng đến tay Khách)?
SELECT *, DATEDIFF(dh_ngaygiao, dh_ngaylap) TongThoiGianGiaoHang
FROM dondathang
ORDER BY DATEDIFF(dh_ngaygiao, dh_ngaylap) DESC
LIMIT 0,3;

-- 4. Thống kê Danh sách các Sản phẩm chưa được cập nhật Hình ảnh (không có bất kỳ hình ảnh nào) để Nhân viên cập nhật Hình ảnh bổ sung.
SELECT *
FROM sanpham sp
WHERE sp.sp_ma NOT IN (
  SELECT hsp.sp_ma
  FROM hinhsanpham hsp
);

-- 5. Tìm khách hàng Lớn tuổi nhất trong Hệ thống?
SELECT (YEAR(NOW()) - kh_namsinh) AS Tuoi, kh.*
FROM khachhang kh
ORDER BY (YEAR(NOW()) - kh_namsinh) DESC, kh_tendangnhap ASC
LIMIT 0,1;

-- 6. Thống kê danh sách các Sản phẩm nào đã bán gần hết số lượng (số lượng < 10 xem như gần hết), để chủ SHOP nhập thêm hàng về?
SELECT sp.sp_ma, sp.sp_ten, sp.sp_soluong
  , (SELECT SUM(spddh.sp_dh_soluong) FROM sanpham_dondathang spddh	WHERE spddh.sp_ma = sp.sp_ma) AS TongSoLuongBan
FROM sanpham sp
WHERE ((SELECT SUM(spddh.sp_dh_soluong) FROM sanpham_dondathang spddh WHERE spddh.sp_ma = sp.sp_ma) - sp.sp_soluong) < 10;

-- 7. Thống kê danh sách các Sản phẩm đang bán lỗ vốn (giá hiện tại < giá cũ)? Cần hiển thị thông tin như sau:
-- Tên Nhà sản xuất	Tên Loại sản phẩm	Tên Sản phẩm	Giá cũ	Giá hiện tại	Chênh lệch giá
-- …	…	…	…	…	…
SELECT nsx.nsx_ten
  , lsp.lsp_ten
  , sp.sp_ten, sp.sp_giacu, sp.sp_gia, (sp.sp_gia - IFNULL(sp.sp_giacu, sp.sp_gia)) AS ChenhLechGia
FROM sanpham sp
JOIN nhasanxuat nsx ON sp.nsx_ma = nsx.nsx_ma
JOIN loaisanpham lsp ON sp.lsp_ma = lsp.lsp_ma
WHERE (sp.sp_gia - IFNULL(sp.sp_giacu, sp.sp_gia)) < 0;

-- 8. Thống kê danh sách các Sản phẩm đang Khuyến mãi trong thời gian 2 tháng/60 ngày (tính từ ngày hiện tại)?
SELECT *, DATEDIFF(km.km_denngay, NOW()) AS SoNgayKhuyenMaiConLai
FROM sanpham sp
JOIN khuyenmai km ON sp.km_ma = km.km_ma
WHERE DATEDIFF(km.km_denngay, NOW()) > 60;

-- 9. Thống kê danh sách các Đơn hàng chưa được xử lý xong (Trạng thái = 0), sắp xếp Giảm dần theo Tổng thành tiền Đơn hàng?
SELECT ddh.dh_ma, ddh.dh_ngaylap, ddh.dh_ngaygiao, ddh.dh_noigiao, ddh.dh_trangthaithanhtoan, ddh.httt_ma, ddh.kh_tendangnhap
  , SUM(spddh.sp_dh_soluong * spddh.sp_dh_dongia) AS TongThanhTien
FROM dondathang ddh
JOIN sanpham_dondathang spddh ON ddh.dh_ma = spddh.dh_ma
WHERE ddh.dh_trangthaithanhtoan = 0
GROUP BY ddh.dh_ma, ddh.dh_ngaylap, ddh.dh_ngaygiao, ddh.dh_noigiao, ddh.dh_trangthaithanhtoan, ddh.httt_ma, ddh.kh_tendangnhap
ORDER BY SUM(spddh.sp_dh_soluong * spddh.sp_dh_dongia) DESC;

-- 10. Hình thức thanh toán phổ biến nhất là gì? Tổng doanh số đạt được của Hình thức thanh toán này là bao nhiêu?
SELECT httt.httt_ma, httt.httt_ten, COUNT(*) AS TongSoDonHang
FROM dondathang ddh
JOIN hinhthucthanhtoan httt ON ddh.httt_ma = httt.httt_ma
GROUP BY httt.httt_ma, httt.httt_ten
ORDER BY COUNT(*) DESC
LIMIT 0,1;

SELECT ddh.dh_ma, ddh.dh_ngaylap, ddh.dh_ngaygiao, ddh.dh_noigiao, ddh.dh_trangthaithanhtoan, ddh.httt_ma, ddh.kh_tendangnhap
  , SUM(spddh.sp_dh_soluong * spddh.sp_dh_dongia) AS TongThanhTien
FROM dondathang ddh
JOIN sanpham_dondathang spddh ON ddh.dh_ma = spddh.dh_ma
WHERE ddh.httt_ma = (
  SELECT httt.httt_ma
    -- , httt.httt_ten, COUNT(*) AS TongSoDonHang
  FROM dondathang ddh
  JOIN hinhthucthanhtoan httt ON ddh.httt_ma = httt.httt_ma
  GROUP BY httt.httt_ma, httt.httt_ten
  ORDER BY COUNT(*) DESC
  LIMIT 0,1
)
GROUP BY ddh.dh_ma, ddh.dh_ngaylap, ddh.dh_ngaygiao, ddh.dh_noigiao, ddh.dh_trangthaithanhtoan, ddh.httt_ma, ddh.kh_tendangnhap;
 

Chương trình học


  1. Giới thiệu, cài đặt môi trường thực hành 1
    1. Database Online dành cho học tập và thực hành các ví dụ #8691
  2. Tổng quan, khái niệm về database 2
    1. Tổng quan, khái niệm về database và các thành phần trong database RDMS #8565
    2. Các kiểu dữ liệu trong MySQL #8575
  3. Các lệnh tạo cấu trúc (schema database) 7
    1. Mô hình thực thể ER của cơ sở dữ liệu (database) NetaShop #2448
    2. Tạo cơ sở dữ liệu (database) NetaShop - Sử dụng HeidiSQL #8587
    3. Tạo bảng (table) Danh mục phẳng - Sử dụng HeidiSQL #8582
    4. Tạo bảng (table) Danh mục có liên kết khóa ngoại (có quan hệ) - Sử dụng HeidiSQL #8597
    5. Tạo bảng (table) theo quan hệ Nhiều - Nhiều (N-N) - Sử dụng HeidiSQL #8619
    6. Tạo bảng (table) có Quan hệ Tự thân (self foreign key) - Sử dụng HeidiSQL #8664
    7. Cơ sở dữ liệu mẫu salomon #11820
  4. Các lệnh cập nhật dữ liệu (Insert - Update - Delete) 3
    1. Câu lệnh Thêm dữ liệu (INSERT) #2663
    2. Câu lệnh Cập nhật dữ liệu (UPDATE) #2665
    3. Câu lệnh Xóa dữ liệu (DELETE) #2664
  5. Các lệnh truy vấn dữ liệu (query data) 6
    1. Câu lệnh Truy vấn dữ liệu SELECT Đơn giản #2666
    2. Câu lệnh Truy vấn dữ liệu SELECT với bộ lọc dữ liệu WHERE #2668
    3. Câu lệnh Truy vấn dữ liệu SELECT với sắp xếp dữ liệu ORDER BY #2669
    4. Câu lệnh Truy vấn dữ liệu SELECT với mệnh đề giới hạn dữ liệu LIMIT OFFSET #8693
    5. Tìm hiểu cơ chế phân trang (Pagination) và cách viết câu lệnh truy vấn dữ liệu SELECT áp dụng cơ chế phân trang (Pagination) với LIMIT OFFSET #12249
    6. Bài tập Truy vấn CSDL #2457
  6. Các lệnh truy vấn dữ liệu (query data) - Nâng cao 5
    1. Các loại Kết nối LEFT JOIN, FULL JOIN, RIGHT JOIN #2670
    2. Kết nối các bảng dữ liệu INNER JOIN #2667
    3. Kết nối các bảng dữ liệu LEFT JOIN #11753
    4. Kết nối các bảng dữ liệu RIGHT JOIN #11752
    5. Kết nối các bảng dữ liệu FULL OUTER JOIN #11754
  7. Bài tập Tổng hợp 1
    1. Truy vấn dữ liệu cho Nghiệp vụ Bán hàng #2671
  8. Phân tích, thiết kế Hệ thống 8
    1. Các mối quan hệ giữa các Thực thể (Entity) #8596
    2. Bài tập thiết kế Cơ sơ dữ liệu quản lý Nhân viên và Phòng ban #8600
    3. Bài tập thiết kế Cơ sở dữ liệu Quản lý Giảng viên và Sinh viên #8601
    4. Bài tập thiết kế Cơ sở dữ liệu Quản lý Chấm công Tiền lương #8620
    5. Bài tập thiết kế Cơ sở dữ liệu Quản lý Nhân sự #8629
    6. Bài tập thiết kế Cơ sở dữ liệu Quản lý Bán hàng Thương mại điện tử (Có quản lý Nhập, Xuất, Kho hàng) #9352
    7. Kho sách, nguồn tài liệu tham khảo Cơ sở dữ liệu MySQL #9001
    8. Plugin tự động sinh tài liệu mô tả cấu trúc của các bảng cho MySQL Workbench #9356
  9. Quản trị người dùng và cấp quyền trong MySQL 1
    1. Tìm hiểu về các loại quyền có trong MySQL #10455
  10. Tham khảo 2
    1. Thiết kế Cơ sở dữ liệu Bán hàng TMĐT có quản lý Kho hàng, Nhập xuất, Tồn kho, Phân quyền, Khuyến mãi, Tin tức #12053
    2. Sinh số ngẫu nhiên RANDOM NUMBER trong MySQL #12292
Các bài học

Chương trình học

Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...

Chương trình học


  1. Giới thiệu, cài đặt môi trường thực hành 1
    1. Database Online dành cho học tập và thực hành các ví dụ #8691
  2. Tổng quan, khái niệm về database 2
    1. Tổng quan, khái niệm về database và các thành phần trong database RDMS #8565
    2. Các kiểu dữ liệu trong MySQL #8575
  3. Các lệnh tạo cấu trúc (schema database) 7
    1. Mô hình thực thể ER của cơ sở dữ liệu (database) NetaShop #2448
    2. Tạo cơ sở dữ liệu (database) NetaShop - Sử dụng HeidiSQL #8587
    3. Tạo bảng (table) Danh mục phẳng - Sử dụng HeidiSQL #8582
    4. Tạo bảng (table) Danh mục có liên kết khóa ngoại (có quan hệ) - Sử dụng HeidiSQL #8597
    5. Tạo bảng (table) theo quan hệ Nhiều - Nhiều (N-N) - Sử dụng HeidiSQL #8619
    6. Tạo bảng (table) có Quan hệ Tự thân (self foreign key) - Sử dụng HeidiSQL #8664
    7. Cơ sở dữ liệu mẫu salomon #11820
  4. Các lệnh cập nhật dữ liệu (Insert - Update - Delete) 3
    1. Câu lệnh Thêm dữ liệu (INSERT) #2663
    2. Câu lệnh Cập nhật dữ liệu (UPDATE) #2665
    3. Câu lệnh Xóa dữ liệu (DELETE) #2664
  5. Các lệnh truy vấn dữ liệu (query data) 6
    1. Câu lệnh Truy vấn dữ liệu SELECT Đơn giản #2666
    2. Câu lệnh Truy vấn dữ liệu SELECT với bộ lọc dữ liệu WHERE #2668
    3. Câu lệnh Truy vấn dữ liệu SELECT với sắp xếp dữ liệu ORDER BY #2669
    4. Câu lệnh Truy vấn dữ liệu SELECT với mệnh đề giới hạn dữ liệu LIMIT OFFSET #8693
    5. Tìm hiểu cơ chế phân trang (Pagination) và cách viết câu lệnh truy vấn dữ liệu SELECT áp dụng cơ chế phân trang (Pagination) với LIMIT OFFSET #12249
    6. Bài tập Truy vấn CSDL #2457
  6. Các lệnh truy vấn dữ liệu (query data) - Nâng cao 5
    1. Các loại Kết nối LEFT JOIN, FULL JOIN, RIGHT JOIN #2670
    2. Kết nối các bảng dữ liệu INNER JOIN #2667
    3. Kết nối các bảng dữ liệu LEFT JOIN #11753
    4. Kết nối các bảng dữ liệu RIGHT JOIN #11752
    5. Kết nối các bảng dữ liệu FULL OUTER JOIN #11754
  7. Bài tập Tổng hợp 1
    1. Truy vấn dữ liệu cho Nghiệp vụ Bán hàng #2671
  8. Phân tích, thiết kế Hệ thống 8
    1. Các mối quan hệ giữa các Thực thể (Entity) #8596
    2. Bài tập thiết kế Cơ sơ dữ liệu quản lý Nhân viên và Phòng ban #8600
    3. Bài tập thiết kế Cơ sở dữ liệu Quản lý Giảng viên và Sinh viên #8601
    4. Bài tập thiết kế Cơ sở dữ liệu Quản lý Chấm công Tiền lương #8620
    5. Bài tập thiết kế Cơ sở dữ liệu Quản lý Nhân sự #8629
    6. Bài tập thiết kế Cơ sở dữ liệu Quản lý Bán hàng Thương mại điện tử (Có quản lý Nhập, Xuất, Kho hàng) #9352
    7. Kho sách, nguồn tài liệu tham khảo Cơ sở dữ liệu MySQL #9001
    8. Plugin tự động sinh tài liệu mô tả cấu trúc của các bảng cho MySQL Workbench #9356
  9. Quản trị người dùng và cấp quyền trong MySQL 1
    1. Tìm hiểu về các loại quyền có trong MySQL #10455
  10. Tham khảo 2
    1. Thiết kế Cơ sở dữ liệu Bán hàng TMĐT có quản lý Kho hàng, Nhập xuất, Tồn kho, Phân quyền, Khuyến mãi, Tin tức #12053
    2. Sinh số ngẫu nhiên RANDOM NUMBER trong MySQL #12292

Bài học trước Bài học tiếp theo