2012-07-06 26 views
5

Tôi có một bảng doanh thu nhưMysql tham gia và tổng được tăng gấp đôi kết quả

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 

khi tôi thực hiện truy vấn này

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

nó tạo ra kết quả

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

đó là ok, bây giờ tôi muốn kết hợp kết quả tổng hợp với một bảng khác có cấu trúc như thế này

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

khi tôi thực hiện tham gia với chức năng tổng hợp như thế này

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  

nó đôi kết quả

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

Tôi không thể hiểu tại sao nó tăng gấp đôi nó, xin vui lòng giúp

Trả lời

11

Nhân đôi của nó vì bạn có tiêu đề lặp lại trong bảng quỹ và doanh thu. Điều này sẽ nhân số bản ghi mà nó khớp với nhau. Điều này là khá dễ dàng để xem nếu bạn loại bỏ các chức năng tổng hợp và nhìn vào dữ liệu thô. See here

Cách để giải quyết vấn đề này là tạo chế độ xem nội tuyến của tổng hợp của bạn và tham gia vào các kết quả đó.

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 

đầu ra

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

demo

+0

Có chi phí hiệu suất lớn nào cho điều này không? –

1

Có hai hàng cho mỗi title_id trong bảng doanh thu.

3

Lý do cho điều này là bạn phải tham gia bàn bảng đầu tiên có nguồn gốc từ bảng thứ hai mà không cần nhóm nó. Để giải quyết vấn đề, hãy nhóm bảng thứ hai (fund) và nối nó với bảng dẫn xuất đầu tiên bằng cách sử dụng LEFT JOIN.

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 
Các vấn đề liên quan