2014-07-10 6 views
5

के बजाय मैं पहली बार मेज "आदेश" का नाम दिया है और 2 टेबल "विवरण" नामMysql बायाँ शामिल हों और योग और शून्य

orders : 
order_id 
1 
2 
3 

details : 
id | order_id | qty 
1 | 1  | 2 
2 | 1  | 3 

मैं इस प्रकार कैसे दिखाऊं 0 दिखाते हैं?

order_id | total 
1  | 5 
2  | 0 
3  | 0 

मैं इस क्वेरी की कोशिश की लेकिन काम नहीं किया:

SELECT *, SUM(qty) AS total 
FROM order o 
LEFT JOIN details d 
    ON o.order_id = d.order_id 

उत्तर

7

इस प्रयास करें:

SELECT o.order_id, IFNULL(SUM(d.qty),0) AS total 
FROM orders o 
    LEFT JOIN details d ON o.order_id = d.order_id 
GROUP BY order_id 
+0

, पहले कॉलम द्वारा 1' समूहों द्वारा धन्यवाद, मैं छुआ कर रहा हूँ ... –

+0

@MarcusAdams 'ग्रुप बेहद पठनीय नहीं है, लेकिन यह काम करता है। – Arth

+0

@Arth, पता करने के लिए अच्छा है, लेकिन निश्चित रूप से भ्रामक। –

5

यह आप क्या कह रहे हैं क्या करेंगे। यह 0 से nulls का स्थान ले लेगा अगर कोई विस्तार रिकॉर्ड के साथ एक आदेश है।

SELECT o.order_id, 
    coalesce(sum(d.qty), 0) 
from orders o 
left join details d 
    on o.order_id = d.order_id 
group by o.order_id; 

Link to SQL Fiddle Example.

+0

+1। । । एएनएसआई मानक 'coalesce() 'का उपयोग करें। एसक्यूएल फिल्ड उदाहरण। टेबल उपनाम का उपयोग करें। मेरा एकमात्र सुझाव: तालिका उपनाम तालिका संक्षेप होना चाहिए, इसलिए मैं 'a' और' b' के बजाय 'o' और' d' पसंद करता हूं। –

+0

@ गॉर्डन लिनॉफ धन्यवाद। मैंने आपके सुझाव के अनुसार उदाहरण और उत्तर अपडेट किया है। – SQLChao

संबंधित मुद्दे