2016-10-05 11 views
6
पर

मेरे डेटाबेस के रूप में इस प्रकार हैMySQL जोड़ना और एकाधिक स्तंभ का चयन

तालिका नाम दिखता है: आदेश विवरण

id  oid  pid pquantity pprice 
-------------------------------------- 
    1  1  5  2  10 
    2  1  6  3  5 
    3  1  7  1  20 
    5  2  8  1  5 
    6  2  9  1  5 
    7  3  5  5  10 

तालिका का नाम: आदेश

id  odiscount oshipping 
---------------------------- 
    1  5  5   
    2  0  5   
    3  0  5 

मैं के लिए चालान मूल्य प्राप्त करना चाहते हैं प्रत्येक आदेश। (pquantity*pprice)-odiscount+oshipping। मुश्किल हिस्सा यह है कि ऑर्डर विवरण में प्रत्येक ऑर्डर में कई प्रविष्टियां हो सकती हैं। तो मैं इसका ख्याल रखने के तरीके को समझने में असमर्थ हूं। अंतिम परिणाम

oid total 
1  55 
2  15 
3  55 

होना चाहिए मैं इस कोशिश की निम्नलिखित एसक्यूएल का उपयोग कर, लेकिन मैं यह पता लगाने की कैसे खाते में आदेश विवरण में अनेक पंक्तियों लेने में असमर्थ हूँ।

SELECT SUM((orderdetails.pprice*orderdetails.pquantity) - orders.odiscount + orders.oshipping) FROM orders LEFT JOIN orderdetails ON orderdetails.oid = orders.id GROUP BY orders.id 

उत्तर

3

मेरा मानना ​​है कि आप भी एक सबक्वेरी का उपयोग किए बिना ऐसा कर सकते हैं:

SELECT SUM(od.pquantity*od.pprice) + AVG(o.oshipping - o.odiscount) 
FROM Orders o 
INNER JOIN OrderDetails od 
    ON o.id = od.oid 
GROUP BY o.id 

डेमो यहां:

SQLFiddle

+1

उप प्रश्न का उपयोग करने में क्या गलत है? – sagi

+0

मैं मानता हूं कि यह संभवतः जाने का तरीका है, लेकिन मैं टिप्पणियों के प्रति दृष्टिकोण से बहुत परेशान हूं। – Strawberry

+3

@ स्ट्रॉबेरी सागी नियमित रूप से मेरे उत्तरों पर टिप्पणियों का एक टन डंप करती है, कुछ भी नहीं पर बातचीत करती है, उम्मीद है कि उसका जवाब अधिक प्राचीन दिखाई देगा, और इसलिए हर किसी की तुलना में अधिक सही होगा। टिप्पणी: यह रणनीति वास्तव में अच्छी तरह से काम करती प्रतीत होती है (हालांकि मैं इसका उपयोग नहीं करता)। –

3

आप समूह order_details क्वेरी पहले और उसके बाद ही यह orders मेज पर शामिल हो सकते हैं:

SELECT sum_details - odiscount + oshipping 
FROM orders o 
JOIN (SELECT oid, SUM(pquantity * pprice) AS sum_details 
     FROM  order_details 
     GROUP BY oid) d ON o.id = d.oid 
संबंधित मुद्दे