为什么我不能在这个查询中使用GROUP BY

问题描述 投票:0回答:2

当我在 MS SQL Management Studio 中执行以下查询时,它产生了错误。

查询:

select  u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by r.RoleName

错误:

消息 8120,级别 16,状态 1,第 2 行列“User.UserName”无效 在选择列表中,因为它不包含在聚合中 函数或 GROUP BY 子句。

注:

我使用的话没有错误

group by r.RoleName, u.UserName
sql sql-server-2008 group-by
2个回答
4
投票

这演示了

single-value rule
,它会禁止您在运行
GROUP BY
查询时获得未定义的结果,并且您在选择列表中包含既不属于分组标准的一部分,也不出现在聚合函数中的任何列
(SUM, MIN, MAX, etc.) 
。希望你能理解。

分组依据

我不知道,但也许你想要这个..

select distinct u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId

1
投票

GROUP BY 语句与聚合函数结合使用,可按一列或多列对结果集进行分组。

select  u.UserName, r.RoleName
from User u
join UserRole ur on ur.UserId = u.UserId
join Role r on r.RoleId = ur.RoleId
group by u.UserName,r.RoleName

group by 与聚合函数一起使用或用于过滤重复项。在 sql-server group by 中,需要 select 中除聚合函数之外的所有列。

对于mysql,下面的查询不会抛出错误。它将为 group by 子句中的每个项目选择第一行。

select  u.UserName, r.RoleName
    from User u
    join UserRole ur on ur.UserId = u.UserId
    join Role r on r.RoleId = ur.RoleId
    group by r.RoleName
© www.soinside.com 2019 - 2024. All rights reserved.