自从我将子查询添加到其中后,以下查询似乎永远都要运行。
我最初尝试通过两次加入来实现我的目标,但结果是错误的。
有没有人知道写这个的正确方法?
if (movies[i].hasWatched) {
// ...
} else {
// ...
}
以下示例数据
答案 0 :(得分:1)
奇怪的是,子选择不可能,因为计数只与分组间接相关。您想要计算与一个客户相关的所有订单的所有订单行吗?通常这应该使用第二个连接来完成,但是orderheader将在order_lines存在的情况下重复。这会在其他聚合中产生错误的结果。
通常这应该有帮助,将子选择放入连接表:
可以用
替换orderheader o
吗?
(select o.*, (select count(ol.orderLines_id) from orderlines ol where ol.orderLines_orderId = o.orderHeader_id) as linesOrder from orderheader o) as o
并用
替换子选择 sum(o.linesOrder)
答案 1 :(得分:1)
对于您想要的数据,我认为这是要走的路:
SELECT c.cus_Name,
COUNT(o.orderHeader_id) AS Orders,
SUM(ol.cnt) as linesOrderd,
MAX(o.orderHeader_dateCreated) AS lastOrdered,
SUM(o.orderHeader_totalSell) AS orderTotal,
SUM(o.orderHeader_currentSell) AS sellTotal
FROM cus c JOIN
orderheader o
ON o.orderHeader_customer = c.cus_id LEFT JOIN
(SELECT ol.orderLines_orderId, count(*) as cnt
FROM orderlines ol
GROUP BY ol.orderLines_orderId
) ol
ON ol.orderLines_orderId = o.orderHeader_id)
GROUP BY c.cus_name
ORDER BY orderTotal DESC;
我不确定它是否会更快,但它至少会产生一个明智的结果 - 客户的订单行总数而不是任意订单的订单行数。