2017-08-16 98 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