2012-10-12 26 views
6

तो मैं इस तरह एक मेज है:योग एकाधिक पंक्तियों

id mod n1 n2 n3 
1  1  1  1 
1  2   2 
1  3     3 
2  1  1 
2  2   2 
3  1  1 

और मैं एक स्तंभ कॉल कुल में एक विशिष्ट आईडी के लिए सभी पंक्तियों के लिए प्रत्येक मान योग करना चाहते हैं, लेकिन मैं नहीं करना चाहते आईडी को एक साथ समूहित करें क्योंकि उनके पास अलग-अलग मोड संख्या है। मैं इस तरह एक परिणाम हैं:

id mod total 
1  1  7 
1  2  7 
1  3  7 
2  1  3 
2  2  3 
3  1  1 

मैं द्वारा समूह उपयोग नहीं कर सकते क्योंकि यह मेरे बस प्रत्येक अलग-अलग पंक्तियों के लिए कुल दे देंगे। मैं जो परिणाम चाहता हूं उसे कैसे प्राप्त करूं?

+1

मैं करने के लिए सही कॉल था कुल कॉलम के पीछे calcul समझ में नहीं आता? – njzk2

+1

विंडोज फ़ंक्शंस के साथ आपको आवश्यक परिणाम को वापस करने के लिए एक एकल पंक्ति क्वेरी मिल सकती है। दुर्भाग्य से, MySQL उन्हें समर्थन नहीं करता है। –

+1

@ njzk2: यदि आप पहली तालिका देखते हैं, तो आप देखेंगे कि 'id' के विरुद्ध सभी आइटमों के कुल योग के साथ कुल मिलान। मॉड का कोई वास्तविक प्रभाव प्रतीत नहीं होता है इसलिए दूसरी तालिका में प्रत्येक रिकॉर्ड के लिए 'कुल' एक अनावश्यक कॉलम प्रतीत होता है। –

उत्तर

7

आप कुछ इस तरह कर सकता है: हालांकि इस के प्रदर्शन के बारे

SELECT `table`.`id`, `mod`, mySum 
FROM `table` 
JOIN (SELECT `id`, SUM(n1) + SUM(n2) + SUM(n3) AS mySum 
     FROM `table` GROUP BY `id`) as grpTable 
ON `table`.`id` = `grpTable`.`id` 

सुनिश्चित नहीं हैं ...

+0

मुझे लगता है कि इसे चयनित खंड – mickeymoon

+0

में 'id' से पहले __'table' .__ उपसर्ग की आवश्यकता होगी, आप सही हैं, मैं अपना उत्तर अपडेट करूंगा –

2

प्रयास करें:

select t.id, t1.mod, t.total 
from tab t1 
join (select id, sum(IFNULL(n1,0)+ IFNULL(n2,0)+ IFNULL(n3,0)) as total 
     from tab 
     group by id) t on t.id=t1.id 
1
SELECT `id`, `mod`, (SUM(n1) + SUM(n2) + SUM(n3)) AS total 
FROM `table` 
GROUP BY `id`,`mod` 
0

यह आप के लिए काम करना चाहिए । ओरेकल में काम किया। जांचें कि क्या mysql में कीवर्ड बदलना है या नहीं।

SELECT x.id, x.mod, y.sum 
    FROM table x, 
     (SELECT id, sum(nvl(n1, 0) + nvl(n2, 0) + nvl(n3, 0)) sum 
      FROM table 
     GROUP BY id) y 
WHERE x.id = y.id; 
1

दूसरा उत्तर सही था, सब यह आवश्यक ifnull

select t.id, t1.mod, t.total 
from test.source t1 
join (select id, sum(IFNULL(n1,0)+ IFNULL(n2,0)+ IFNULL(n3,0)) as total 
     from test.source 
     group by id) t on t.id=t1.id 
संबंधित मुद्दे