मेरे पास नीचे की तरह एक खरीद तालिका है

customerID orderID  item   category     purDate   sold price
    1        001    book   stationary   1/1/2018    1   5
    2        002    ball    toys        1/1/2018    2   2
    3        003    shirt   cloth       1/1/2018    1   10
    1        004    pen    stationary   1/1/2018    5   3
    4        005    shirt   cloth       1/1/2018    2   10
    5        006    card    stationary  1/2/2018    15  2
    6        007    tshirt  cloth       1/2/2018    3   7
    2        008    book    stationary  1/3/2018    6   5
    3        009    car      toys       1/3/2018    2   4
    1        010    book    stationary  1/3/2018    4   5
    4        011    ball     toys       1/4/2018    2   2
    6        012    pen     stationary  1/4/2018    2   3
    7        013    notebk  stationary  1/4/2018    2   3

और मैं MySQL का उपयोग करके प्रत्येक दिन और श्रेणी के लिए सबसे अधिक बिकने वाले आइटम को क्वेरी करना चाहता हूं ताकि क्वेरी परिणाम ऐसा दिखाई दे

purDate     category    item   total revenue
1/1/2018    stationary  pen       5     15
1/1/2018     toys       ball      2      4
1/1/2018     cloth      shirt     3     30
1/2/2018    stationary  card     15     30
1/2/2018     cloth      tshirt    3     21
1/3/2018    stationary  book     10     50
1/3/2018     toys       car       2      8
1/4/2018     toys       ball      2      4
1/4/2018    stationary  pen       2      6
1/4/2018    stationary  notebk    2      6

मैंने स्टैक ओवरफ्लो पर अन्य संबंधित विषयों की जांच की है लेकिन जो मैं ढूंढ रहा हूं उसे नहीं मिला। मैं कुल कार्यों के साथ विंडो फ़ंक्शन का उपयोग करने का प्रयास कर रहा हूं, लेकिन असफल रहता हूं।

SELECT purDate, category, item, total, revenue 
 FROM (SELECT purDate, category, item, SUM(sold) AS total, sold * price AS revenue, 
   RANK() OVER(PARTITION BY purDate, category ORDER BY SUM(sold) DESC) AS rank 
 GROUP BY 1,2,3) q
 WHERE q.rank = 1

आपकी सहायता के लिए अग्रिम रूप से धन्यवाद।

0
demi 8 जुलाई 2018, 06:30

2 जवाब

सबसे बढ़िया उत्तर

आप अपनी आंतरिक क्वेरी में एक FROM चूक जाते हैं। और आप price के आधार पर समूह बनाने और revenue को sum(sold) * price के रूप में बनाने से भी चूक गए। इसके अलावा आप बिल्कुल सही रास्ते पर थे।

SELECT purdate,
       category,
       item,
       total,
       revenue
       FROM (SELECT purdate,
                    category,
                    item,
                    sum(sold) total,
                    sum(sold) * price revenue,
                    rank() OVER (PARTITION BY purdate
                                 ORDER BY sum(sold) DESC) r
                    FROM purchase
                    GROUP BY purdate,
                             category,
                             item,
                             price) x
       WHERE r = 1
       ORDER BY purdate;

डीबी<>बेला

2
sticky bit 8 जुलाई 2018, 07:10

आप जो हासिल करने की कोशिश कर रहे हैं उसे एक बड़ी क्वेरी के बजाय कई चरणों में तोड़ने से डरो मत।

Create table bleach select 
pur_date, max(sold) as max_sold, 
'' as total_rev
from your_table group by 
pur_date;

Alter table bleach add 
index(pur_date);

Alter table bleach add index 
(max_sold);

Select a.* from your_table a, 
bleach b where 
a.pur_date=b.pur_date and 
a.max_sold=b.max_sold;

Update bleach set 
total_rev=sold*price

Drop table bleach;
1
Bleach 8 जुलाई 2018, 06:53