2017-08-16 168 views
-3

我有2個表;輸出不如預期,當我嘗試groupjoinSUM GROUP BY JOIN SQL錯誤輸出

下面是表:

表1
table1

表2
table2

這裏是代碼:

SELECT *, SUM(total_jual) AS totaljual, SUM(total_beli) AS totalbeli 
FROM penjualan 
JOIN pembelian ON penjualan.tgl_penjualan = pembelian.tgl_pembelian 
GROUP BY penjualan.tgl_penjualan 

我想要這個輸出:**2017-08-16** **4404000** **18051000**
如何實現這個?

+1

在聚合查詢中包含「*」是沒有意義的。請參閱:[爲什麼我應該爲我認爲是非常簡單的SQL查詢提供一個MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-對於什麼似乎對我來說是一個非常簡單的SQL查詢) – Strawberry

+0

'SELECT * GROUP BY'是無效的SQL。 – axiac

回答

1

當加入你的每個置換,即一個線的地方連接條件匹配的每個組合一行。這會導致您的示例中的四行中每個值都被複制。嘗試沒有GROUP BY的選擇,你會看到。爲了得到正確的總和,您需要加入來自第二個表格的彙總結果:

SELECT penjualan.tgl_penjualan, 
     SUM(total_jual) AS totaljual, 
     max(b.total_beli) AS totalbeli 
FROM penjualan 
JOIN (SELECT tgl_pembelian, sum(total_beli) AS total_beli FROM pembelian 
     GROUP BY tgl_pembelian) AS b 
    ON penjualan.tgl_penjualan = b.tgl_pembelian 
GROUP BY penjualan.tgl_penjualan; 

適用於任何語法錯誤。我沒有測試過SQL。

+0

它錯了你的總和(total_beli)兩次 – Nithin

+0

你是對的,應該是max(b.total_beli)在外部語句中。我做了一個編輯。 min(b.total_beli)將會得到相同的結果,因爲只有一行。 – stenix

+0

謝謝@stenix其工作 – Ramadhani

0

你可以試試下面的查詢:

SELECT penjualan.tgl_penjualan, SUM(total_jual) AS totaljual, SUM(total_beli) AS totalbeli 
FROM penjualan JOIN pembelian ON penjualan.tgl_penjualan = pembelian.tgl_pembelian 
GROUP BY penjualan.tgl_penjualan; 
0

試試這個

SELECT top 1 penjualan.tgl_penjualan,SUM(total_jual) AS totaljual,b.total_beli AS totalbeli 
FROM penjualan 
INNER JOIN (SELECT tgl_pembelian, sum(total_beli) AS total_beli 
      FROM pembelianGROUP BY tgl_pembelian) AS b 
ON penjualan.tgl_penjualan = b.tgl_pembelian 
GROUP BY penjualan.tgl_penjualan,b.total_beli; 
+0

輸出錯誤,我想輸出2017-08-16 4404000 18051000 – Ramadhani

+0

有什麼錯誤? – Nithin

+0

輸出2017-08-16 8808000 36102000 – Ramadhani