为何SQL查询中ordertaken列计算错误?是否与分组有关?求正确计算方法
问题解答
1. 是否是分组方式导致的问题?
不是分组方式的问题。错误根源在于多表连接产生的重复行:
orders(订单表)和order_details(订单明细表)是一对多关系,一个订单会对应多条订单明细记录。- 四张表连接后,每个订单会被重复输出多次(重复次数等于该订单包含的商品明细行数)。
- 直接用
COUNT(t2.orderid)会把重复的订单ID全部计入统计,导致ordertaken(接单量)的结果远大于实际订单数。
2. 如何正确计算ordertaken列?
使用COUNT(DISTINCT t2.orderid)替代COUNT(t2.orderid),通过DISTINCT关键字对订单ID去重,确保每个订单只被统计一次。
修正后的完整SQL语句:
SELECT t2.employeeid, t1.firstname || ' ' || t1.lastname as fullname, sum(t3.quantity*t4.price) as totalsales, COUNT(DISTINCT t2.orderid) AS ordertaken, COUNT(DISTINCT t2.customerid) AS uniquecustomercount FROM employees as t1 JOIN orders as t2 on t2.employeeid = t1.employeeid JOIN order_details as t3 on t2.orderid = t3.orderid JOIN products as t4 on t4.productid = t3.productid GROUP BY t2.employeeid, fullname
内容的提问来源于stack exchange,提问作者APAR
相关产品推荐
相关产品推荐

