php - 加入表格时总和不正确
问题描述
在这里,我分别有 3 个表名 A、B、C,我想加入所有表并获取结果
为了获得所需的输出,我编写了这样的代码
SELECT A.date as d_date,B.agent_name,
(SELECT SUM(B.profit) FROM B WHERE A.id = B.bill_id) AS total_profit,
SUM(C.total_price) AS t_price,SUM(C.total_dc) AS t_dc
FROM A LEFT JOIN B ON A.id=B.bill_id
LEFT JOIN C ON C.data_id=B.id
WHERE DATE(A.date) BETWEEN '{$start_date}' AND '{$end_date}'
AND A.customerid=406
GROUP BY Date(A.date),A.customerid
ORDER BY A.id;
问题是从表中获取Purchase
值作为列的第一个值。profit
B
我希望我想要的输出是这样的
Name Date Purchase t_price t_dc
Ned 2019-07-26 210.60 80 40
但我变得这样了
Name Date Purchase t_price t_dc
Ned 2019-07-26 15.60 80 40
解决方案
这里的问题是,表 C 有 2 行,并且都有data_id
as 67159
。因此,当您将其与表 B 连接时,它将计算bill_id 67159
两次利润。您必须使用一个条件才能仅选择 1 行。我已将您的查询更新为 -
SELECT A.date as d_date,B.agent_name, SUM(B.profit) AS total_profit,
SUM(C.total_price) AS t_price,SUM(C.total_dc) AS t_dc
FROM A LEFT JOIN B ON A.id=B.bill_id
AND A.customerid = B.user_id
LEFT JOIN C ON C.data_id=B.id
WHERE DATE(A.date) BETWEEN '2019-07-26' AND '2019-07-26'
AND A.customerid=406
GROUP BY Date(A.date),B.agent_name
ORDER BY A.id;
这个查询给出了total_profit
as 226.2
。
推荐阅读
- wordpress - 合并 2 个 woocommerce 产品查询
- javascript - 查询firestore中的集合组
- docker - Dockerfile 中用于安装 vuetify 的 RUN 命令是什么?
- javascript - POST 后 MongoDB 数组保持空白
- javascript - 大学课程的流程图框架
- r - 在因子中使用时间来创建自定义列
- python - Python 不替换特殊字符: Â
- php - 在服务器上拉取并加载外部 php 网页
- json - 如何在 SwiftUI 中访问 json 响应?
- vulkan - 基于屏障的同步后清理命令缓冲区(和资源);但验证层仍然抱怨