sql - 使用 CROSS JOIN 添加额外的列
问题描述
这是我上一个问题的后续问题: 标识符无法在多个公用表表达式中绑定
我想添加一个名为“总体平均”的列来显示使用 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' 在选择列表中无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中”错误。有人可以解释为什么我会收到这个错误以及如何解决它吗?
谢谢
解决方案
正如我在评论中建议的那样,在您的选择中使用。
min(a.[Overall Average])
这应该可以解决问题,并且应该为您提供所需的输出。
这将确保聚合函数用于选择而不是分组依据的列。此外,由于您是从交叉连接中提取字段,因此您可以使用任何聚合函数,例如 min、max 等,结果/输出将是相同的。
推荐阅读
- java - 比较包含两个数字的类
- asp.net - Visual Studio 无法识别 Azure 帐户
- django - 在无服务器应用程序中刷新 OAuth2 访问令牌
- python - 如何通过 .sh 运行脚本(django)正确运行 virtualenv
- javascript - 即使抛出错误,Google Cloud Functions 也会返回结果
- apache-spark - Spark Sql - 运行两次
- angular - RequestOptions 的 Angular HttpClient 替代品?
- php - curl https://SERVER_IP:8443 在 Mac 上有效,但在我通过 SSH 连接到服务器时无效
- mysql - 避免mysql文件排序
- c++ - 通过移动从两个向量创建元组向量