Aggregate functions return wrong values when joining more tables(连接更多表时聚合函数返回错误的值)
本文介绍了连接更多表时聚合函数返回错误的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要显示所有客户及其地址以及他们的订单数量和总金额。我的查询如下所示:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
group by c.custId;
哪个工作正常。
但如果我向查询中添加一个新表:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
那么它将不再起作用。聚合函数返回错误的值,因为每个客户可能有多个地址,这是正确的,我还想显示它们的所有地址。 我可以做些什么来解决聚合函数问题?
我可以考虑这样做:
select *, (select total from orders o where o.custid=c.custid), ..
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
但这非常慢。
编辑 我现在尝试了以下方法,但它告诉我域c.cutid未知:
select *
from
customer c,
left join (select sum(o.tota), count(o.total) from orders o where o.custid=c.custid) as o
where ...
group by c.custId;
推荐答案
简单解决方案:使用两个查询。
否则,您可以在子查询(针对整个表,而不是每行)中进行聚合计算,然后将子查询的结果与Addresses表连接以获得额外数据。试试这个:SELECT *
FROM customer T1
LEFT JOIN
(
SELECT custId,
SUM(total) AS sum_total,
COUNT(total) AS count_total
FROM orders
-- WHERE ...
GROUP BY custId
) T2
ON T1.custId = T2.custId
-- WHERE ...
这篇关于连接更多表时聚合函数返回错误的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:连接更多表时聚合函数返回错误的值
基础教程推荐
猜你喜欢
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01