mysql - 如何修复 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 子句,所以我真的不明白我应该做什么。我知道我的解释不是很清楚,但是如果有人可以帮助我,那就太好了
解决方案
尝试使用子查询
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
推荐阅读
- react-native - 任务“:react-native-pjsip:compileReleaseJavaWithJavac”执行失败
- extjs - 如何从 ExtJs 网格中删除列?
- c# - 不允许修改 Column 对象的 DefaultConstraintName 属性
- python - 你怎么能让你的列表在 25 个字母之后成为下一个字符?
- svn - SVN 将存储库物理文件夹从一个驱动器移动到另一个驱动器
- angular-forms - 尽管动态删除了 FormGroup 仍然有控件
- python - 递归和返回以找到值的索引
- javascript - VueJS 和 Firebase - 如何验证某人的密码
- java - 读取数据库中登录的用户变量
- react-native - 导航到新视图