Nguyễn Thị Thuý Hằng
Nguyễn Thị Thuý Hằng
Thảo luận 2 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 23 lượt xem

tổng profit tháng này với tháng trước đó với thời điểm tháng được xác định theo cột order_date , nếu em muốn lấy dữ liệu như này thì làm như nào ạ? em viết mãi không được ạ

tổng profit tháng này với tháng trước đó với thời điểm tháng được xác định theo cột order_date , nếu em muốn lấy dữ liệu như này thì làm như nào ạ? em viết mãi không được ạ

Thảo luận 2 câu trả lời
Lượt xem 23 lượt xem
Vỗ tay vỗ tay
Nguyễn Thị Thuý Hằng 12:04 - Apr 22, 2023

Chào bạn, bạn có thể thực hiện như sau:

Đầu tiên tính lợi nhuận tháng trước, tháng này rồi so sánh. 

Ví dụ, data của bạn có các trường:

  • id: số định danh của mỗi hóa đơn.
  • product: tên sản phẩm hoặc dịch vụ được bán.
  • revenue: số tiền thu được từ sản phẩm hoặc dịch vụ đó.
  • cost: chi phí để sản xuất hoặc cung cấp sản phẩm hoặc dịch vụ đó.
  • date: ngày của hóa đơn.

Code SQL tính lợi nhuận tháng trước: 

SELECT SUM(revenue - cost) AS profit
FROM sales
WHERE date >= DATEADD(month, DATEDIFF(month, 0, GETDATE())-1, 0)
AND date < DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
Code SQL tính lợi nhuận tháng này: 

SELECT SUM(revenue - cost) AS profit_this_month
FROM sales
WHERE YEAR(date) = YEAR(GETDATE()) AND MONTH(date) = MONTH(GETDATE())
 

Còn muốn tạo ra bảng tính so sánh luôn lợi nhuận tháng trước/tháng này, bạn có thể dùng code như sau: 

SELECT 
   SUM(CASE WHEN YEAR(date) = YEAR(GETDATE()) AND MONTH(date) = MONTH(GETDATE()) 
            THEN revenue - cost ELSE 0 END) AS profit_this_month,
   SUM(CASE WHEN YEAR(date) = YEAR(DATEADD(month, -1, GETDATE())) AND MONTH(date) = MONTH(DATEADD(month, -1, GETDATE())) 
            THEN revenue - cost ELSE 0 END) AS profit_last_month,
   SUM(CASE WHEN YEAR(date) = YEAR(GETDATE()) AND MONTH(date) = MONTH(GETDATE()) 
            THEN revenue - cost ELSE 0 END) - 
   SUM(CASE WHEN YEAR(date) = YEAR(DATEADD(month, -1, GETDATE())) AND MONTH(date) = MONTH(DATEADD(month, -1, GETDATE())) 
            THEN revenue - cost ELSE 0 END) AS profit_change
FROM sales

 

Giải thích: 

  • Chúng ta sử dụng các hàm YEAR và MONTH để trích xuất năm và tháng từ cột ngày. Chúng ta sử dụng hàm DATEADD để lấy tháng trước từ ngày hiện tại.
  • Trong phần SELECT của truy vấn, chúng ta sử dụng các câu lệnh CASE để tính lợi nhuận của tháng này và tháng trước, sau đó tính sự khác biệt giữa chúng.
  • Cụ thể, chúng ta sử dụng CASE WHEN để chỉ định cho mỗi bản ghi có nằm trong tháng này hay tháng trước, và tính tổng lợi nhuận bằng cách trừ chi phí từ doanh thu cho mỗi bản ghi đó. Cuối cùng, chúng ta tính lợi nhuận thay đổi bằng cách trừ tổng lợi nhuận của tháng trước từ tổng lợi nhuận của tháng này. 
  • Kết quả sẽ trả về 3 cột: "profit_this_month" là lợi nhuận của tháng này, "profit_last_month" là lợi nhuận của tháng trước, và "profit_change" là sự khác biệt giữa lợi nhuận của tháng này và tháng trước.
     
Vỗ tay vỗ tay
Nguyễn Thị Thuý Hằng 22:04 - Apr 25, 2023

Dạ, em cảm ơn thầy rất nhiều ạ

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông