在SQL中分组查询 Group by 的存在条件是什么

在select 语句中 Group by的存在条件是什么
为什么数据库总是报这样的错误:
消息 8120,级别 16,状态 1,第 1 行
选择列表中的列 'userinfo.UserName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

请说的详细点,最好举个例子..谢谢

楼主你好,
首先你要明白group by 是分组查询的意思
使用group by 关键字时,在select列表中可以指定的项目是有限制的,
select语句中仅允许以下几项,
1:被分组的列
2:为每个分组返回一个值的表达式,
例如用一个列明作为参数的聚合函数小僧再介绍一下几个常用的聚合函数
1:sum 求和
2:avg 求平均值
3:max / min 求最大值 / 最小值
4:count 表达式中非空值的出现次数
楼主你是想查什么呢?
我打2个比方吧查询男同学和女同学的分数总和
select sum(成绩) as 成绩总和,性别
from cj
group by 性别
结果样式:
成绩总和 性别
XXX 男
XXX 女

如果是多表连接的话,那就是连接后的表,然后再分组。。。
group by 的是在分组后面操作的语句

查询男同学和女同学的平均分
select avg(成绩) as 平均分,性别
from cj
group by 性别
结果样式:
平均分 性别
XXX 男
XXX 女
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-22
GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。

USE AdventureWorks;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID ;
GOGROUP BY 关键字后跟一个列的列表,称为组合列。GROUP BY 子句限制结果集中的行数,每个不同的值在组合列中只占一行。每个结果集行都包含与其组合列中的特定值相关的汇总数据。

当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项目有一些限制。选择列表中允许的项目是:

组合列。

为组合列中的每个值只返回一个值的表达式,例如将列名作为其参数之一的聚合函数。这些函数称为矢量聚合。

简单点来说就是select 语句中调用的函数如果能够使用group by 才能存在group by 子句 通常是一些统计函数返回集合的情况。例如sum()
第2个回答  2013-08-22
查询语句里用了GROUP BY 后面要跟所有的字段名如userinfo.UserName,不然查不到。
貌似联表都这样
相似回答