我在SQL Server中编写了此脚本,我想从此Joined Table中获得带有订单数上限的食物名称。我可以正确获得最大值,但是当我添加FoodName时选择“它给我一个错误”。
SELECT S.FoodName, MAX(S.OrderCount) FROM
(SELECT FoodName,
SUM(Number) AS OrderCount
FROM tblFactor
INNER JOIN tblDetail
ON tblFactor.Factor_ID = tblDetail.Factor_ID
WHERE FactorDate = '2020-10-30'
GROUP BY FoodName)S
这是错误消息
在选择列表中,列'S.FoodName'无效,因为该列未包含在聚合函数或GROUP BY子句中。
我也知道我可以使用order by和top来获得食品名称和最大订购号,但是我想使用在此脚本中使用的方式。谢谢您的回答
答案 0 :(得分:0)
如果我正确地跟随了您,您可以直接在ORDER BY
查询的结果上使用TOP (1)
和join
:
SELECT TOP (1) f.FoodName, SUM(d.Number) AS OrderCount
FROM tblFactor f
INNER JOIN tblDetail d ON f.Factor_ID = d.Factor_ID
WHERE f.FactorDate = '2020-10-30'
GROUP BY f.FoodName
ORDER BY OrderCount DESC
注意:
我在查询中添加了表别名,并在每列前面加上了它的表(大概是!);您可能需要进行回顾,因为我不得不做个假设
如果要允许平局,请改用TOP (1) WITH TIES
答案 1 :(得分:0)
外部查询MAX()
中有一个聚合函数,一个未聚合的列。因此,数据库需要一个GROUP BY
。
相反,请使用ORDER BY
和LIMIT
:
SELECT FoodName, SUM(Number) AS OrderCount
FROM tblFactor f INNER JOIN
tblDetail d
ON fd.Factor_ID = d.Factor_ID
WHERE FactorDate = '2020-10-30'
GROUP BY FoodName
ORDER BY OrderCount DESC
LIMIT 1;
注意:在引用多个表的查询中,应限定所有列引用。目前尚不清楚列的来源,因此我无法对此查询执行此操作。