[英]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
中的数据应该是可识别的,并且您应该将付款与债务联系起来。 目前有两种解决方案。
将新列card_id
或chart_num_id
添加到表credit_card
。 然后,您可以定期运行脚本,将card_id
的值分配给卡,如果您在向该表添加行时无法执行此操作。 但是......如果有 2 笔 2000 美元的债务,而您只会收到一笔 2000 美元的付款,该怎么办。 如果没有有关该付款的其他信息,就不可能将一笔付款分配给正确的 ID。
每天检查付款日期分组而不是卡片。 您可以通过检查每天的付款总额来修改 SQL 脚本。 现在您将付款分组在chart_num
上,而不是您可以分组在card_date
和visit
上。
您仍然可以构造有效的 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.