繁体   English   中英

比较这两个表不会产生预期的结果。 我该如何解决?

[英]Comparing the two tables does not produce the desired result. How can I fix it?

我想比较两张表。 但是,它们不是在同一日期进行比较的。

1.表名:hospital_payment_data

id    chart_num        chart_name          visit            card_amount_received
1        9740             t1             2019-01-02               500                        
2        9740             t1             2019-01-02               500           
3        23143            t2             2019-01-02               2000                        
4        14220            t3             2019-01-02               3000              

2.表名:credit_card

id           card_date             advenced_amount
1           2019-01-02                 1000        
2           2020-01-02                 2000   
3           2020-01-02                 3000 

3.表格名称:图表

 id               name
9740               t1     
23143              t2          
14220              t3        

当我发送查询时,我得到以下信息:

select
  charts.id as chart_num,
  visit,
  charts.name as chart_name,
  sum(card_amount_received) as card_amount_received,
  credit_card.card_date,
  credit_card.amount as amount,
  if(credit_card.amount = sum(card_amount_received), 'ok', 'error') as result
from hospital_payment_data
join charts on charts.id = chart_num
left join credit_card on date(credit_card.card_date) = visit
group by chart_num, visit

错误的错误结果:

在此处输入图像描述

我要结果

在此处输入图像描述

如何修复我的查询? 请帮助我。

您的表结构无效。 您在表credit_card中的数据应该是可识别的,并且您应该将付款与债务联系起来。 目前有两种解决方案。

  1. 将新列card_idchart_num_id添加到表credit_card 然后,您可以定期运行脚本,将card_id的值分配给卡,如果您在向该表添加行时无法执行此操作。 但是......如果有 2 笔 2000 美元的债务,而您只会收到一笔 2000 美元的付款,该怎么办。 如果没有有关该付款的其他信息,就不可能将一笔付款分配给正确的 ID。

  2. 每天检查付款日期分组而不是卡片。 您可以通过检查每天的付款总额来修改 SQL 脚本。 现在您将付款分组在chart_num上,而不是您可以分组在card_datevisit上。

  3. 您仍然可以构造有效的 SQL 查询,但非常复杂,我完全不明白为什么这比 1. 想法更可取。 几乎没有任何利润的大量努力。

这是常见的 JOIN 乘法。 在子查询中计算总和,然后加入另一个表。

你能给我详细解释一下吗? – 用户 1082164

想象有一张桌子

id   val
 1   100
 1   200

val的总和是 300。假设有另一个表

id   txt
 1   'A'
 1   'B'

通过id加入第一个。 从第一个表连接每一行时,将连接到第二个表的每个匹配行:

SELECT id, val, txt FROM t1 JOIN t2 USING (id);

id   val  txt
 1   100  'A'
 1   200  'A'
 1   100  'B'
 1   200  'B'

现在加入团块中val的总和是 600 - 它乘以每个连接。

为了获得正确的总和,我们必须首先在子查询中按单个表求和(不加入乘法效应),然后将另一个表加入求和子查询。

PS。 我不会编辑您的查询 - 它与 ONLY_FULL_GROUP_BY 设置不匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM