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

时间:2013-07-31 11:04:23

标签: 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

错误:

  

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

我曾经使用过sql,而我认为这是一些基本的命令。但我仍然无法弄清楚原因。

注意:

如果我使用

,则没有错误
  

按r.RoleName,u.UserName

分组

2 个答案:

答案 0 :(得分:4)

这演示了single-value rule,它禁止运行GROUP BY查询时得到的未定义结果,并且您在select-list中包含既不属于分组条件的列,也不包括出现在汇总函数(SUM, MIN, MAX, etc.)中。希望你明白。

<强> Group By

我不知道,但可能你想要这个......

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 :(得分: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中,需要select而不是aggregate函数的所有列。

对于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