Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql:求和联接表值_Php_Mysql_Join_Sum - Fatal编程技术网

Php Mysql:求和联接表值

Php Mysql:求和联接表值,php,mysql,join,sum,Php,Mysql,Join,Sum,我对联接和SUM()有问题 我有两个表,agents(id,name)和orders(id,agent\u id,total) 现在,我需要一份所有代理商的名单,计算他们下了多少订单以及所有订单的总数。以下是我的基本疑问: SELECT agents.*, COUNT(DISTINCT orders.id) total_orders, SUM(orders.total) total_amount FROM agents LEFT JOIN orders ON agents

我对联接和
SUM()
有问题

我有两个表,
agents(id,name)
orders(id,agent\u id,total)

现在,我需要一份所有代理商的名单,计算他们下了多少订单以及所有订单的总数。以下是我的基本疑问:

SELECT
    agents.*,
    COUNT(DISTINCT orders.id) total_orders,
    SUM(orders.total) total_amount
FROM agents
LEFT JOIN orders ON agents.id = orders.agent_id
GROUP BY agents.id
total\u orders
正确,但
total\u amount
不正确。每个代理都有错误的
SUM()


在一个查询中可能吗?我不想在循环中再次查询。

您不需要左连接,请将
左连接
替换为
连接

SELECT
    agents.*,
    COUNT(DISTINCT orders.id) total_orders,
    SUM(orders.total) total_amount
FROM agents
JOIN orders ON agents.id = orders.agent_id
GROUP BY agents.id
您得到的错误结果是由于这样一个事实造成的,即即使没有任何记录的agent_id等于agents.id,左联接也会从orders表中检索一行

另一方面,单个连接将无法检索没有订单的代理

哦,那么你需要所有的代理商,没有订单的代理商的总数是0。。。然后左连接应该可以工作。否则,您可以这样做:

SELECT
    agents.*,
    COUNT(DISTINCT orders.id) total_orders,
    SUM(CASE WHEN orders.id IS NULL then 0 ELSE orders.total END) total_amount
FROM agents
LEFT JOIN orders ON agents.id = orders.agent_id
GROUP BY agents.id

谢谢,这解决了问题的另一半,但是现在没有任何订单的代理不再显示。您不需要
CASE
SUM ignore nulls这很奇怪,因为这与我最初的查询类似。不过老实说,我在这个查询中还有其他连接,我尝试了一段时间后,发现另一个左连接把我的结果搞砸了。如果你得到的都是空的,那很容易
COALESCE(SUM(column),0)
Hey@JuanCarlosOropeza我的姓也是Oropeza,我是玻利维亚的Roberto Oropeza Gamarra!嗨,堂兄:)您不需要不同的订单。id
if
order.id
id pk在订单表上。您能给我们展示一些示例数据和预期输出吗。我不明白那个查询怎么会给你错误的总数。