mysql - 加入两个表后,Count Wise 求和是错误的
问题描述
当前输出:
实体名称 | 总客户 | 发票金额 | 网上支付 | 现金支付 | 总付款 |
---|---|---|---|---|---|
达卡 | 20 | 20000 | 20900 | 0 | 20900 |
mq_billing 表在“Dhaka” Entity_Name 下有 2 条发票记录,其中“Invoice Amount”应该是 (1000 + 500 = 1500),但它显示 20000,因为 mq_paymentlist 表在“Dhaka”Entity_Name 下有 20 条付款记录。
我们需要分别对每个表记录求和。任何人都可以帮助..
输出应该是:
实体名称 | 总客户 | 发票金额 | 网上支付 | 现金支付 | 总付款 |
---|---|---|---|---|---|
达卡 | 20 | 1500 | 20900 | 0 | 20900 |
SELECT b.Entity_Name, COUNT(b.Customer_Nbr) as 'Total Customer'
, SUM(b.Invoice_Amount) as 'Invoice Amount'
, CASE WHEN p.Payment_Mode = 'Online Payment' THEN SUM(p.Amount) ELSE 0 END 'Online Payment'
, CASE WHEN p.Payment_Mode = 'Cash' THEN SUM(p.Amount) ELSE 0 END 'Cash Payment'
, SUM(p.Amount) as 'Total Payment'
FROM mq_billing b, mq_paymentlist p
WHERE b.Entity_Name = p.Entity_Name
GROUP BY Entity_Name
ORDER BY Entity_Name;
解决方案
在每个表中分别聚合,然后加入。
您必须在聚合函数中包含CASE
表达式:SUM()
SELECT b.Entity_Name,
b.`Total Customer`,
b.`Invoice Amount`,
p.`Online Payment`,
p.`Cash Payment`,
p.`Total Payment`
FROM (
SELECT Entity_Name,
COUNT(Customer_Nbr) AS `Total Customer`,
SUM(Invoice_Amount) AS `Invoice Amount`
FROM mq_billing
GROUP BY Entity_Name
) b INNER JOIN (
SELECT Entity_Name,
SUM(CASE WHEN Payment_Mode = 'Online Payment' THEN Amount ELSE 0 END) AS `Online Payment`,
SUM(CASE WHEN Payment_Mode = 'Cash' THEN Amount ELSE 0 END) AS `Cash Payment`,
SUM(Amount) AS `Total Payment`
FROM mq_paymentlist
GROUP BY Entity_Name
) p ON b.Entity_Name = p.Entity_Name
ORDER BY b.Entity_Name;
此外,使用带有ON
子句的正确连接并在列别名周围使用反引号,而不是单引号。
推荐阅读
- azure-data-factory - ADF CDM 源转换未读取数据
- python - 如何解决 ImportError: cannot import name 'Tweet' from 'GetOldTweets3.models.Tweet'
- php - 在 laravel 查询中指定数据库表
- laravel - 如何正确从 Laravel 7 中删除引导程序?
- nginx - 如何让 Nginx 找到 keycloak-tls?
- r - R 检查软件包列表,然后加载或安装
- ios - cellForRowAt->Thread 1:致命错误:索引超出范围
- c++ - Refer to an overlapping function with "using namespace std"
- paypal - 使用他们的 API 取消贝宝订阅 - 如何在已支付的时期保持帐户活跃?
- node.js - Hyperledger Fabric 实例化超时 .npm ERR!网络超时:https://registry.npmjs.org