Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tính doanh thu mỗi học kỳ

Tại đây, bạn có thể xem định nghĩa đơn giản và giải pháp cho vấn đề của mình (nếu tôi hiểu bạn đúng): http ://sqlfiddle.com/#! 9/48a2e1 / 1

CREATE TABLE foundry
(
    lru varchar(50) NOT NULL,
    client int  NOT NULL,
    purchase_date date,
    price int NOT NULL
);

INSERT INTO foundry (lru, client, purchase_date, price) VALUES
("article1", 4001, "01-01-16", 100),
("article1", 4001, "01-01-17", 200),
("article1", 4001, "01-02-16", 300),
("article1", 4001, "01-04-16", 400),
("article1", 4001, "01-06-16", 500),
("article1", 4001, "01-08-16", 600),
("article1", 4001, "01-10-16", 700),
("article1", 4001, "01-11-16", 800),
("article1", 4002, "01-01-16", 900),
("article1", 4002, "01-07-16", 1000),
("article1", 4002, "01-12-16", 1100);

Về cơ bản, chúng ta có một bảng với bốn cột:lru (tên bài viết), khách hàng, ngày mua và một số giá.

Giải pháp có dạng như sau:

SELECT lru, client, avg(price), COUNT(*) as total_items,
MONTHNAME(STR_TO_DATE(L, '%m')) as start_month, MONTHNAME(STR_TO_DATE(R, '%m')) as end_month FROM foundry,
(
  SELECT 1 as L, 6 as R
    UNION ALL
  SELECT 2, 7
    UNION ALL
  SELECT 3, 8
    UNION ALL
  SELECT 4, 9
    UNION ALL
  SELECT 5, 10
    UNION ALL
  SELECT 6, 11
    UNION ALL
  SELECT 7, 12
) months
WHERE month(purchase_date) >= L AND month(purchase_date) <= R
GROUP BY lru, client, L, R

Ý tưởng là:

  1. Tạo tất cả các kết hợp tháng có thể có:1-6, 2-7, ..., 7,12
  2. Kết hợp dữ liệu nguồn với kết hợp các tháng đã tạo
  3. Sử dụng AVG với GROUP BY

Và kết quả:

lru     client  avg(price)  total_items     start_month     end_month
article1    4001    300     5   January     June
article1    4001    400     3   February    July
article1    4001    500     3   March   August
article1    4001    500     3   April   September
article1    4001    600     3   May     October
article1    4001    650     4   June    November
article1    4001    700     3   July    December
article1    4002    900     1   January     June
article1    4002    1000    1   February    July
article1    4002    1000    1   March   August
article1    4002    1000    1   April   September
article1    4002    1000    1   May     October
article1    4002    1000    1   June    November
article1    4002    1050    2   July    December


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để cài đặt bộ điều hợp Rails MySQL?

  2. MySQL trích xuất dữ liệu từ chuỗi csv và chèn vào bảng thứ hai

  3. Chuyển các biến MySQL sang tập lệnh từ dòng lệnh

  4. Yêu cầu về Blob và Lưu trữ

  5. MySQL tách các ký tự không phải số để so sánh