从联接表中获取最大

时间:2020-10-30 14:42:37

标签: sql sql-server

我在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来获得食品名称和最大订购号,但是我想使用在此脚本中使用的方式。谢谢您的回答

2 个答案:

答案 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 BYLIMIT

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;

注意:在引用多个表的查询中,应限定所有列引用。目前尚不清楚列的来源,因此我无法对此查询执行此操作。