2012-07-06 19 views
5

दोगुना कर रही है मैंMysql में शामिल होने और योग परिणाम

title_id  revenue cost 
    1   10  5 
    2   10  5 
    3   10  5 
    4   10  5 
    1   20  6      
    2   20  6 
    3   20  6 
    4   20  6 

रूप में राजस्व की मेज है जब मैं इस क्वेरी

SELECT SUM(revenue),SUM(cost) 
FROM revenue 
GROUP BY revenue.title_id 

यह परिणाम

title_id  revenue cost 
    1   30  11 
    2   30  11 
    3   30  11 
    4   30  11 

जो ठीक है का उत्पादन पर अमल, अब मैं एक और तालिका के साथ योग परिणाम जोड़ना चाहता हूं जिसमें संरचना है

title_id  interest  
    1   10   
    2   10   
    3   10   
    4   10   
    1   20        
    2   20   
    3   20   
    4   20   

जब मैं निष्पादित इस

SELECT SUM(revenue),SUM(cost),SUM(interest) 
FROM revenue 
LEFT JOIN fund ON revenue.title_id = fund.title_id 
GROUP BY revenue.title_id,fund.title_id  

तरह एकीकृत फ़ंक्शन के साथ शामिल होने के लिए उसे डबल परिणाम

title_id  revenue cost interest 
    1   60  22  60 
    2   60  22  60 
    3   60  22  60 
    4   60  22  60 

मैं नहीं समझ सकता क्यों यह यह दोगुना है, कृपया मदद

उत्तर

11

इसकी दोगुनी वजह है क्योंकि आपके पास फंड और राजस्व तालिकाओं में शीर्षक दोहराया गया है। यह रिकॉर्ड्स की संख्या को गुणा करता है जहां यह मेल खाता है। यह देखने में बहुत आसान है कि क्या आप कुल कार्यों को हटाते हैं और कच्चे डेटा को देखते हैं। See here

अपने आसपास के इनलाइन दृश्यों को बनाने और उन परिणामों पर शामिल होने का तरीका है।

SELECT R.title_id, 
     R.revenue, 
     R.cost, 
     F.interest 
FROM (SELECT title_id, 
       Sum(revenue) revenue, 
       Sum(cost) cost 
     FROM revenue 
     GROUP BY revenue.title_id) r 
     LEFT JOIN (SELECT title_id, 
         Sum(interest) interest 
        FROM fund 
        GROUP BY title_id) f 
       ON r.title_id = F.title_id 

उत्पादन

| TITLE_ID | REVENUE | COST | INTEREST | 
---------------------------------------- 
|  1 |  30 | 11 |  30 | 
|  2 |  30 | 11 |  30 | 
|  3 |  30 | 11 |  30 | 
|  4 |  30 | 11 |  30 | 

demo

+0

क्या इसके लिए कोई बड़ी प्रदर्शन लागत है? –

1

राजस्व तालिका में प्रत्येक title_id के लिए दो पंक्तियां हैं।

3

इस का कारण आप यह समूहीकरण के बिना दूसरा तालिका के पहले ली गई तालिका में शामिल हो गए तालिका होता है। समस्या को हल करने के लिए, दूसरी तालिका (fund) समूहबद्ध करें और बाएं जॉइन का उपयोग करके पहली व्युत्पन्न तालिका के साथ इसमें शामिल हों।

SELECT b.title_id, 
     b.TotalRevenue, 
     b.TotalCost, 
     d.TotalInterest 
FROM 
(
    SELECT a.title_id, 
      SUM(a.revenue) TotalRevenue, 
      SUM(a.cost) TotalCost 
    FROM  revenue a 
    GROUP BY a.title_id 
) b LEFT JOIN 
(
    SELECT c.title_id, 
      SUM(a.interest) TotalInterest 
    FROM  fund c 
    GROUP BY c.title_id 
) d ON b.title_id = d.title_id 
संबंधित मुद्दे