使用 CROSS JOIN 添加额外的列

Using CROSS JOIN to add extra column

这是我之前问题的后续问题:

我想添加一个名为“总体平均值”的列来显示使用 CROSS JOIN 的所有行的总体发货天数:

WITH orderDetails (days, state) 
AS(
    SELECT DATEDIFF(day, o.OrderDate, ol.ShipDate), o.State 
    FROM SQLBook.dbo.Orders o
    JOIN [SQLBook].dbo.OrderLines ol
    ON ol.OrderId = o.OrderId
)
,
/* This finds the overall average shipping days */
AvgShipping (avgShip)
AS(
    SELECT AVG(DATEDIFF(day, o.OrderDate, ol.ShipDate))
    FROM SQLBook.dbo.Orders o
    JOIN [SQLBook].dbo.OrderLines ol
    ON ol.OrderId = o.OrderId
)

SELECT
    ord.state,
    AVG(ord.days) AS "Average days to ship",
    a.[Overall Average] AS "Overall Average"
FROM orderDetails ord
CROSS JOIN
(SELECT avgShip AS "Overall Average" FROM AvgShipping) a
GROUP BY state
HAVING AVG(days) > (SELECT avgShip FROM AvgShipping)
ORDER BY state

但是我收到“列 'a.Overall Average' 在 select 列表中无效,因为它既不包含在聚合函数中也不包含在 GROUP BY 子句中”错误。有人可以解释为什么我会收到此错误以及如何修复它吗?

谢谢

正如我在评论中建议的那样,在您的 select 中使用。

 min(a.[Overall Average]) 

这应该可以解决问题,并且可以为您提供所需的输出。

这将确保将聚合函数用于 select 中而不是分组依据中的列。此外,由于您是从 cross-join 中提取字段,因此您可以使用任何聚合函数,例如 min、max 等,result/output 将是相同的。