php - 如何从多个表中选择mysql SUM并从另一个表中选择其他列?

标签 php mysql sum

我有三个表:现金支票账单。所有三个表共享两个公共(public)列:billIdcustomerId

账单表

+--------+------------+---------+------------+
| billId | date       | bAmount | customerId |
+--------+------------+---------+------------+
| #1     | 01-05-2016 | 120.00  | 2          |
+--------+------------+---------+------------+
| #2     | 10-05-2016 | 100.00  | 2          |
+--------+------------+---------+------------+
| #3     | 20-05-2016 | 80.00   | 2          |
+--------+------------+---------+------------+
| #4     | 20-05-2016 | 70.00   | 2          |
+--------+------------+---------+------------+
| #5     | 27-05-2016 | 50.00   | 2          |
+--------+------------+---------+------------+
| #6     | 28-05-2016 | 20.00   | 2          |
+--------+------------+---------+------------+

支票表

+----------+--------+------------+----------+
| chequeId | billId | customerId | chAmount |
+----------+--------+------------+----------+
| 1        | #1     | 2          | 50.00    |
+----------+--------+------------+----------+
| 2        | #2     | 2          | 25.00    |
+----------+--------+------------+----------+
| 3        | #5     | 2          | 36.00    |
+----------+--------+------------+----------+
| 4        | #4     | 2          | 23.00    |
+----------+--------+------------+----------+

现金表

+--------+--------+------------+----------+
| cashId | billId | customerId | caAmount |
+--------+--------+------------+----------+
| 1      | #1     | 2          | 55.00    |
+--------+--------+------------+----------+
| 2      | #2     | 2          | 70.00    |
+--------+--------+------------+----------+
| 3      | #3     | 2          | 69.00    |
+--------+--------+------------+----------+
| 4      | #4     | 2          | 23.00    |
+--------+--------+------------+----------+

我必须生成一个查询才能生成如下结果:

+--------+------------+--------+---------+
| billId | date       | amount | pending |
+--------+------------+--------+---------+
| #1     | 01-05-2016 | 120.00 | 15.00   |
+--------+------------+--------+---------+
| #2     | 10-05-2016 | 100.00 | 05.00   |
+--------+------------+--------+---------+
| #3     | 20-05-2016 | 80.00  | 11.00   |
+--------+------------+--------+---------+
| #4     | 20-05-2016 | 70.00  | 14.00   |
+--------+------------+--------+---------+
| #5     | 27-05-2016 | 50.00  | 04.00   |
+--------+------------+--------+---------+

我正在从另一个页面向此页面发送customerID的值,例如$customerId = $_REQUEST['customerId'],并且从中我必须选择<账单表中的strong>BillId和日期金额(由chAmount+caAmount之和计算得出),以及待处理(通过bAmount-(chAmount+caAmount)的差值计算)。由于 billId #6 在支票现金表中没有任何记录,因此不需要在结果中生成。请提及一个正确的 MySql 查询并解释它。

最佳答案

通常情况下,你应该尝试一些东西,但由于我正处于“美好时光”,所以我编写了完整的 SQL 语句:

SELECT b.billId, b.bDate, b.bAmount, SUM(ch.chAmount) chAmountSum, SUM(ca.caAmount) caAmountSum, (b.bAmount - ( IFNULL(SUM(ch.chAmount), 0)  + IFNULL(SUM(ca.caAmount), 0))) pending
FROM bill b
LEFT JOIN  cheque ch on ch.billId = b.billId
LEFT JOIN  cash ca on ca.billID = b.billId
GROUP BY b.billID;
  • 您必须选择要显示的所有列
  • 对于最后一个(待处理),请进行操作(金额 - (支票 + 现金)),如果它是空值,则通过 IFNULL SQL 函数将其替换为“0”
  • 使用 LEFT JOIN 因为您想要所有账单,即使还没有关联的付款(支票/现金)
  • GROUP BY 来自您的引用列:billID

关于php - 如何从多个表中选择mysql SUM并从另一个表中选择其他列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40154923/

相关文章:

php - Shell:SVN 状态管道到 php 以检查语法

php - 表的选择查询不起作用?

javascript - for/循环中的计数器变量。为什么一个程序可以运行而另一个程序却失败?

php - 存储当前日期时,应该在 web 应用程序中设置还是在数据库中设置?

python - 如果求和列等于零,Groupby .cumsum() 为空白?

python - 对 pandas 数据框中包含字符串的列进行求和

php - 检索嵌入文档

php - 检测空字段 - 问题

php - ( sdonate) 1067/var/www/donate/install.php : 中 'expiretime' 的默认值无效

mysql - ExpressJS - Sequelize - 列丢失错误