Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

प्रत्येक सेमेस्टर में टर्नओवर की गणना कैसे करें

यहां आप अपनी समस्या की सरलीकृत परिभाषा और समाधान देख सकते हैं (यदि मैंने आपको सही ढंग से समझा है):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);

मूल रूप से हमारे पास चार कॉलम वाली एक टेबल है:lru (लेख का नाम), क्लाइंट, खरीदारी की तारीख और कुछ कीमत।

समाधान इस तरह दिखता है:

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

विचार है:

  1. महीनों के सभी संभावित संयोजन जेनरेट करें:1-6, 2-7, ..., 7,12
  2. जनरेट किए गए महीनों के संयोजन के साथ स्रोत डेटा से जुड़ें
  3. ग्रुप बाय के साथ औसत का उपयोग करें

और परिणाम:

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. लारवेल में groupBy () फ़ंक्शन का उपयोग करके सारांश क्वेरी

  2. रूबी mysql2 मणि ​​गलत mysql क्लाइंट लाइब्रेरी संस्करण के लिए संकलित है

  3. सी # MySQL कनेक्टर

  4. फॉरवर्ड इंजीनियर MySQL वर्कबेंच में कुछ नहीं कर रहा है

  5. SQL जो अगले और पिछले 14 दिनों के भीतर सभी जन्मदिनों को सूचीबद्ध करता है