对于以下查询,根据产品订单查找客户同比增长。
SELECT
Cur.orderyear,
Cur.numcusts AS curnumcusts,
Prv.numcusts AS prvnumcusts,
Cur.numcusts - Prv.numcusts AS growth
FROM (
SELECT
YEAR(orderdate) AS orderyear,
COUNT(DISTINCT custid) AS numcusts
FROM Sales.Orders
GROUP BY YEAR(orderdate)) AS Cur
LEFT OUTER JOIN (
SELECT
YEAR(orderdate) AS orderyear,
COUNT(DISTINCT custid) AS numcusts
FROM Sales.Orders
GROUP BY YEAR(orderdate)) AS Prv
ON Cur.orderyear = Prv.orderyear + 1
产生以下输出
订单年份 | curnumcusts | prvnumcusts | 成长 |
---|---|---|---|
2020 | 67 | 空 | 空 |
2021 | 86 | 67 | 19 |
2022 | 81 | 86 | -5 |
我的疑问是
ON Cur.orderyear = Prv.orderyear + 1
如何工作?
如果
Cur.orderyear
是 2021 年,那么 Prv.orderyear + 1
就是 2022 年。那么,2021 = 2022?记录如何在两个不同的表表达式之间匹配(尽管是相同/重复的表达式)。
我假设
ON
是一个谓词,用于查找两个连接表之间的数据相等性,而不是与数据匹配(不确定我刚才所说的是否有意义)。
您能帮我理解
ON
到底是做什么的吗?
Cur
和 Prev
都是从同一个 Sales.Orders
查询的事实是无关紧要的。
你可以这样想:
Cur
的内部查询。它查询的详细信息并不重要 - 唯一重要的是返回数据集。我们称这个数据集为Cur
。Prev
的内部查询。在这里,唯一重要的是返回一个数据集,我们称之为 Prev
。orderyear
列,我们可以根据条件Cur.orderyear = Prv.orderyear + 1
连接它们。