SQL查询可以';不要在FROM语句中使用变量
我是SQL新手,很抱歉问了个愚蠢的问题 表将从此SQL沙盒中删除: 有一个表格的格式SQL查询可以';不要在FROM语句中使用变量,sql,Sql,我是SQL新手,很抱歉问了个愚蠢的问题 表将从此SQL沙盒中删除: 有一个表格的格式 OrderDetailID OrderID ProductID Quantity 1 10248 11 12 2 10248 42 10 3 10248 72 5 4 10249 14 9 5
OrderDetailID OrderID ProductID Quantity
1 10248 11 12
2 10248 42 10
3 10248 72 5
4 10249 14 9
5 10249 51 40
我想得到最大平均数量的产品
我可以通过以下查询获得此信息:
SELECT avg.ProductID, avg.Quantity
FROM (
SELECT ProductID, AVG(Quantity) Quantity
FROM OrderDetails
GROUP BY ProductID
) avg
WHERE avg.Quantity = (
SELECT MAX(Quantity) FROM (
SELECT ProductID, AVG(Quantity) Quantity
FROM OrderDetails
GROUP BY ProductID
)
)
ProductID Quantity
8 70
48 70
这里我用了两次block
SELECT ProductID, AVG(Quantity) Quantity
FROM OrderDetails
GROUP BY ProductID
因为如果我将查询与avg
一起使用,而不是第二个块
SELECT avg.ProductID, avg.Quantity
FROM (
SELECT ProductID, AVG(Quantity) Quantity
FROM OrderDetails
GROUP BY ProductID
) avg
WHERE avg.Quantity = (SELECT MAX(Quantity) FROM avg)
我得到错误无法准备语句(1没有这样的表:avg)
所以我的问题是:
考虑使用
WITH
子句的公共表表达式(CTE),该子句允许您避免重复和重新计算聚合子查询。大多数RDBMS支持CTE(在SQL TryIt链接页面中完全有效)
任何特定类型的SQL?来源:我们的TrySQL编辑器使用WebSQL来演示SQL。
WITH avg AS (
SELECT ProductID, AVG(Quantity) Quantity
FROM OrderDetails
GROUP BY ProductID
)
SELECT avg.ProductID, avg.Quantity
FROM avg
WHERE avg.Quantity = (
SELECT MAX(Quantity) FROM avg
)