MySQL

2010-03-05 5 views
19

में यूनियन से परिणाम का योग करने का एक आसान तरीका है मेरे पास तीन तालिकाओं (टी 1, टी 2, टी 3) का एक संघ है। प्रत्येक फिर से दौड़ना वास्तव में अभिलेखों का एक ही नंबर, पहले कॉलम आईडी, दूसरा राशि है:MySQL

1 10 
2 20 
3 20 

1 30 
2 30 
3 10 

1 20 
2 40 
3 50 

वहाँ एसक्यूएल रास्ते में एक सरल के लिए यह योग करने के लिए है ही मिलती है:

1 60 
2 80 
3 80 

उत्तर

40
select id, sum(amount) from (
    select id,amount from table_1 union all 
    select id,amount from table_2 union all 
    select id,amount from table_3 
) x group by id 
+1

मैं इसे देखने में एक तरीका ढूंढ रहा हूं, लेकिन विचारों में उप-प्रश्नों की अनुमति नहीं है। क्या कोई विकल्प है? –

+1

सबक्वायरी को एक और दृश्य बनाएं – Jimmy

9
SELECT id, SUM(amount) FROM 
(
    SELECT id, SUM(amount) AS `amount` FROM t1 GROUP BY id 
    UNION ALL 
    SELECT id, SUM(amount) AS `amount` FROM t2 GROUP BY id 
) `x` 
GROUP BY `id` 

मैंने प्रत्येक तालिका को समूहीकृत किया और संघीय क्योंकि मुझे लगता है कि यह तेज़ हो सकता है, लेकिन आपको दोनों समाधानों का प्रयास करना चाहिए।

2

Subquery:

SELECT id, SUM(amount) 
FROM (SELECT * FROM t1 
     UNION ALL SELECT * FROM t2 
     UNION ALL SELECT * FROM t3 
    ) 
GROUP BY id 
+0

नोट: आपको इस मामले में चयन * का उपयोग नहीं करना चाहिए। –

+0

नोट 2: मैं शर्त लगाता हूं कि MySQL आपको उपरोक्त – zerkms

+0

@ डेविड को उपनाम असाइन करने के लिए कहेंगे: निश्चित रूप से, मेरा बुरा। शायद कोई फर्क नहीं पड़ता कि आईडी और राशि केवल दो कॉलम हैं, लेकिन इसकी संभावना क्या है? @zerkms: यह भी सच है। – adharris

0

सुनिश्चित नहीं हैं कि अगर MySQL आम तालिका अभिव्यक्ति का उपयोग करता है, लेकिन मैं postgres में यह करना होगा:

WITH total AS(
       SELECT id,amount AS amount FROM table_1 UNION ALL 
       SELECT id,amount AS amount FROM table_2 UNION ALL 
       SELECT id,amount AS amount FROM table_3 
      ) 
SELECT id, sum(amount) 
    FROM total 

मुझे लगता है कि चाल के साथ-साथ क्या करना चाहिए।