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

कुल खरीदारियों की उच्चतम राशि वाले ग्राहक को खोजने की क्वेरी

मेरा मानना ​​है कि निम्न क्वेरी को उच्चतम राशि के साथ ग्राहक नाम की पहचान करने के लिए काम करना चाहिए वर्तमान कैलेंडर वर्ष में सभी आदेशों से प्राप्त:

SELECT CUSTOMER_NAME, Y.QNTY 
FROM CUSTOMER_T CUST,
(
  SELECT X.CUSTOMER_ID, X.QNTY, MAX(X.QNTY) MAXAMT
  FROM (
        SELECT ORD.CUSTOMER_ID, SUM(OLN.QUANTITY * PRD.UNIT_PRICE) QNTY
        FROM ORDER_T ORD, ORDER_LINE_T OLN, PRODUCT_T PRD
        WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(SYSDATE,'YEAR')
        AND ORD.ORDER_ID = OLN.ORDER_ID
        AND PRD.PRODUCT_ID = OLN.PRODUCT_ID
        GROUP BY ORD.CUSTOMER_ID
       ) X 
) Y
WHERE CUST.CUSTOMER_ID = Y.CUSTOMR_ID
AND Y.QNTY = Y.MAXAMT;

सबसे आंतरिक क्वेरी ग्राहक आईडी के आधार पर ORDER, ORDER_LINE, और PRODUCT तालिकाओं को जोड़ती है ताकि चालू वर्ष के लिए कुल खरीदारियों का योग हो (क्रमशः राशि के अवरोही क्रम में)। एक स्तर तक की क्वेरी आंतरिक क्वेरी परिणामों का उपयोग करती है और खरीदारी के अधिकतम योग को जोड़ती है। MAXAMT मान से मेल खाने वाले सभी ग्राहकों के लिए ग्राहक का नाम और कुल ऑर्डर राशि प्राप्त करने के लिए सबसे बाहरी क्वेरी आंतरिक परिणामों के साथ CUSTOMER_T तालिका में शामिल हो जाती है।

आप दिनांक की शर्त को हमेशा 2016 तक सीमित रखने के लिए संशोधित कर सकते हैं (चालू वर्ष की परवाह किए बिना) निम्नानुसार:

WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(SYSDATE,'YEAR')

इस रूप में लिखें:

WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(TO_DATE('01/01/2016','MM/DD/YYYY'),'YEAR')

आप CUSTOMER_T की बाहरी क्वेरी को आंतरिक तालिका के अंदर भी खींच सकते हैं और इसे जॉइन में जोड़ सकते हैं। यह वही काम पूरा करता है, लेकिन मुझे यकीन नहीं है कि कौन सा अधिक कुशल है (जो आपके डेटा सेट के बड़े होने पर लागू होता है)।

नोट:ओरेकल डीबी परिप्रेक्ष्य से लिखा गया है, उम्मीद है कि यह मदद करता है और आप सिंटैक्स को बदलने में सक्षम हैं।

संपादित करें:मुझे एहसास हुआ कि मेरा सुझाव एक ही कुल खर्च राशि वाले कई ग्राहकों की अनदेखी करेगा। मैंने इसे MAX का उपयोग करने और कई ग्राहकों को दिखाने के लिए फिर से काम किया है (यदि लागू हो)। आशा है कि यह आपके लिए काम करेगा/इसे MYSQL में बदला जा सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP और MYSQL:श्रेणियों के लिए समूह का उपयोग करना

  2. mysql में निष्पादन कथन से वापसी मूल्य संग्रहीत करने में असमर्थ

  3. रेगेक्स - स्ट्रिंग में विशिष्ट संख्या पाएं

  4. सिल्वरलाइट को MySQL से अपना डेटा कैसे प्राप्त करें

  5. बैनर इंप्रेशन ट्रैकिंग - डेटाबेस डिज़ाइन