MYSQL摘要查询

时间:2016-03-22 01:37:10

标签: mysql

新手想要增强他的SQL查询,希望有人指导我。

我有表tblIN,它将存储所有传入记录的记录,表tblOUT将存储所有传出记录。现在我想显示来自tblIN的结果,该结果具有一个平衡列,并总结了来自tblOUT的总out_qty。

以下是表格结构

tblIN

id code in_qty 1 A 10 2 B 20 3 A 5

TtblOUT

id code out_qty in_id 1 A 2 1 2 A 4 1 3 A 1 3 4 B 15 2 5 B 3 2 6 B 1 2

结果

in_id code in_qty out_qty balance 1 A 10 6 4 2 B 20 19 1 3 A 5 1 4

此时,我的方法是用2个空列查询tblIN

select id,code,in_qty,0 as out_qty,0 as balance from tblIN

获得结果后,我将遍历所有结果并进行另一次查询以查找总out_qty并进行一些计算以获得余额。

我相信如果它只包含一些小记录,那么我就不会在性能方面遇到问题,但如果我有大量记录,那么我相信它会导致性能问题。

所以我正在寻找的是一个简化而有效的查询来完成上述工作而不需要任何循环。

3 个答案:

答案 0 :(得分:0)

您可以使用SQL LEFT JOINCONCAT代码。然后为了平衡,你可以这样做

SELECT b.in_id, 
       CONCAT(a.code,', ',b.code) as code, 
       a.in_qty, 
       b.out_qty, 
       (a.in_qty-b.out_qty) as balance 
       FROM tblIN a 
       LEFT JOIN tblOUT b 
       ON a.id=b.id

答案 1 :(得分:0)

使用以下查询。

select id,code,in_qty,(select ifnull(sum(out_qty),0) from tblout where in_id=tin.id group by in_id)'out',(in_qty-(select ifnull(sum(out_qty),0) from tblout where in_id=tin.id group by in_id)) as balance from tblin tin

答案 2 :(得分:0)

select 
  id,
  code,
  in_qty,
  (select ifnull(sum(out_qty),0) from tblout where in_id=tin.id group by in_id)'out',
  (in_qty-(select ifnull(sum(out_qty),0) from tblout where in_id=tin.id group by in_id)) as balance 
from tblin tin