【发布时间】:2019-04-30 09:43:00
【问题描述】:
只是一个关于相关查询效率的问题。 假设我想针对一个名为 O1 的 OrderValues 视图实例编写一个外部查询;在 SELECT 列表中,将当前值除以相关子查询的结果,该子查询从 OrderValues 的第二个实例(称为 O2)返回当前客户的总值。这是完整的解决方案查询。
SELECT orderid, custid, val,
CAST(100. * val / (SELECT SUM(O2.val)
FROM Sales.OrderValues AS O2
WHERE O2.custid = O1.custid)
AS NUMERIC(5,2)) AS pct
FROM Sales.OrderValues AS O1
ORDER BY custid, orderid;
orderid custid val pct
----------- ----------- ---------- ------
10643 1 814.50 19.06
10692 1 878.00 20.55
10702 1 330.00 7.72
10835 1 845.80 19.79
10952 1 471.20 11.03
11011 1 933.50 21.85
10308 2 88.80 6.33
10625 2 479.75 34.20
10759 2 320.00 22.81
10926 2 514.40 36.67
但是对于查询SELECT SUM(O2.val) FROM Sales.OrderValues AS O2 WHERE O2.custid = O1.custid,它只需要对每个custid 执行一次,例如,第一行的custoid 为1,在第一行之后,我们已经有了custid 1 的总销售额然后对于第二行,相关查询的结构似乎每次都会再次执行内部查询,无论可能重复吗?
【问题讨论】:
标签: sql