【发布时间】:2017-11-30 16:07:04
【问题描述】:
我有一张这样的桌子:
-
UserName nvarchar(50)(主键) -
FieldId nvarchar(50)(主键) AvgScore float
如果我想创建一个显示“每个 UserName 的最大 AvgScore 是多少”的视图,可以按如下方式轻松创建:
SELECT
UserName, MAX(AvgScore) AS MaxAvgScore
FROM
dbo.tblUsersFields
GROUP BY
UserName
但我想确定与MaxAvgScore 相关的FieldId。我试过了:
SELECT
UserName, FieldId, MAX(AvgScore) AS MaxAvgScore
FROM
dbo.tblUsersFields
GROUP BY
UserName
但这不起作用。这会导致错误:
选择列表中的“FieldId”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
我能做什么?
【问题讨论】:
-
添加一些示例表数据和预期的结果。
-
一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。即尝试
GROUP BY UserName, FieldId。 -
您要么必须聚合
FieldID列(sum / avg / max / 等),要么将其添加到group by子句(...group by UserName, FieldID) -
嗨。谢谢您的回复。在我的表中,每个
UserName可以有多个FieldId,如果我使用GROUP BY UserName, FieldId,则会显示UserName和FieldId的所有组合,而我只想为每个UserName指定一行指定相关@ 987654339@. -
您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,不是特定数据库产品的名称。