首页 > 解决方案 > 如何修复 MS SQL Server 中的“聚合可能不会出现在 WHERE 子句中”错误

问题描述

对于一个学校项目,我需要在 MS SQL Server 中创建一些数据库,创建一些视图,并管理用户访问。问题是我们的课程真的很空,而且我在 MS SQL Server 的一些机制上遇到了麻烦

我与 2018 年足球世界杯的每位球员都有一张桌子,我想选出最矮的 20 名球员,所以我只想使用 ORDER BY Person.Height。如果我使用它,我的结果是这样的:

62    165    Panama    QA19
63    165    SaudiArabia    AY8
78    165    Switzerland SX23
59    166    Mexico    AJ20
etc...

但我只想挑选最矮的球员并按国家排序,而不是按身高排序,所以有这样的东西

69    168    Argentina   SE18
66    168    Argentina   LM15
67    166    Brazil    CF22
64    169    Brazil    RF18

按字母顺序按国家/地区排序的最矮的 20 名球员

这是我现在拥有的代码,这给了我第一个结果

SELECT TOP (20) Person.Weight, Person.Height, Country.NameCountry,                     
LEFT(Person.Name, 1)+LEFT(Person.FirstName, 1)+CAST(Player.Numero AS 
nvarchar(MAX)) AS Initiales

FROM Person INNER JOIN Country 
ON Person.CountryId = Country.CountryID 
INNER JOIN Player 
ON Person.PersonID = Player.PersonID

WHERE -----------------
ORDER BY Person.Height, Country.NameCountry

如果我在 WHERE 子句中使用 MIN(Person.Height) ,则会出现此错误:聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且正在聚合的列是外部参考。 但我不需要任何 HAVING OR GROUP BY 子句,所以我真的不明白我应该做什么。我知道我的解释不是很清楚,但是如果有人可以帮助我,那就太好了

标签: mysql

解决方案


尝试使用子查询

SELECT * FROM (
    SELECT Person.Weight, Person.Height, Country.NameCountry,                     
    LEFT(Person.Name, 1)+LEFT(Person.FirstName, 1)+CAST(Player.Numero AS 
    nvarchar(MAX)) AS Initiales
    FROM Person INNER JOIN Country 
    ON Person.CountryId = Country.CountryID 
    INNER JOIN Player 
    ON Person.PersonID = Player.PersonID
    WHERE -----------------
    ORDER BY Person.Height
    LIMIT 0,20)
ORDER NameCountry

推荐阅读