Sql 为什么我不能在此查询中使用分组依据
当我在MS SQL Management Studio中执行以下查询时,它产生了一个错误 查询:Sql 为什么我不能在此查询中使用分组依据,sql,sql-server-2008,group-by,Sql,Sql Server 2008,Group By,当我在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 错误: select u.UserName, r.RoleName from User u join UserRole
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
错误:
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
Msg 8120,第16级,状态1,第2行“User.UserName”列无效
在选择列表中,因为它不包含在任何聚合中
函数或GROUPBY子句
我使用sql已经有一段时间了,我想这是一些基本的命令。但我还是不明白原因
注:
如果我使用
按r.RoleName、u.UserName分组
该语句与聚合函数一起使用,以按一列或多列对结果集进行分组
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,下面的查询不会抛出错误。它将为GROUPBY子句中的每个项目选择第一行
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
该语句与聚合函数一起使用,以按一列或多列对结果集进行分组
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,下面的查询不会抛出错误。它将为GROUPBY子句中的每个项目选择第一行
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
这演示了
单值规则
,该规则禁止在运行分组依据
查询时获得未定义的结果,并且在选择列表中包含既不属于分组条件的任何列,也不出现在聚合函数(总和、最小值、最大值等)
。希望你能理解
我不知道,但也许你想要这个
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
这演示了
单值规则
,该规则禁止在运行分组依据
查询时获得未定义的结果,并且在选择列表中包含既不属于分组条件的任何列,也不出现在聚合函数(总和、最小值、最大值等)
。希望你能理解
我不知道,但也许你想要这个
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
你想得到什么结果?如果您
按角色名称分组
,则每个角色将获得一行-并且一个角色可能包含多个用户-因此使用它选择用户名
是无效的。您试图获得的结果是什么?如果您按角色名称分组
,则每个角色将得到一行-一个角色可能包含多个用户-因此选择用户名
无效。@PraveenPrasannan我在问题中已经提供了这一点。我不是在寻找解决方案。我的第一个查询不起作用的原因是我需要的。在sql server中,group by需要select中的所有列,而不是聚合函数。关于这个@PraveenPrasannan,我能得到一些参考吗?@PraveenPrasannan我已经在我的问题中提供了这个。我不是在寻找解决方案。我的第一个查询不起作用的原因是我需要的。在sql server中,group by需要select中的所有列,而不是聚合函数。关于这个@PraveenPrasannan,我能得到一些参考资料吗?