请问:用表中的字段做group by 查询需要什么条件吗?为什么我不能直接用表中的字段做分组查询呢?谢谢了!

kevin214 2003-10-09 10:05:02
请问:用表中的字段做group by 查询需要什么条件吗?为什么我不能直接用表中的字段做分组查询呢?谢谢了!
...全文
131 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
伍子V5 2003-10-09
  • 打赏
  • 举报
回复
明白了否,不行的话帖出你的语句,让大家指正
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
select f1,f2,sum(f3) from tablename group by f1,f2
不能
select f1,f2,sum(f3) from tablename group by f1
不能
select f1,f2,sum(f3) from tablename group by f2
不能
select f1,f2,sum(f3) from tablename group by f1,f2,f3
不能
select f1,sum(f3) from tablename group by f1,f2
不能
select f2,sum(f3) from tablename group by f1,f2
sdhdy 2003-10-09
  • 打赏
  • 举报
回复
for example:
这是按f1,f2分组,求f3的和
select f1,f2,sum(f3) from tablename group by f1,f2
pengdali 2003-10-09
  • 打赏
  • 举报
回复
使用 GROUP BY 分组多行
GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。

以下示例返回分类 2 中每种产品已销售的单位数量:

USE Northwind
SELECT OrdD.ProductID AS ProdID,
SUM(OrdD.Quantity) AS AmountSold
FROM [Order Details] AS OrdD JOIN Products as Prd
ON OrdD.ProductID = Prd.ProductID
AND Prd.CategoryID = 2
GROUP BY OrdD.ProductID

下面是结果集:

ProdID AmountSold
----------- -----------
3 328
4 453
5 298
6 301
8 372
15 122
44 601
61 603
63 445
65 745
66 239
77 791

(12 row(s) affected)

GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。

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

分组列。


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

ColumnA ColumnB ColumnC
------- ------- -------
1 abc 5
1 def 4
1 ghi 9
2 jkl 8
2 mno 3



如果 ColumnA 是分组列,则结果集中将有两行,其中一行汇总值 1 的信息,而另一行汇总值 2 的信息。

如果 ColumnA 是分组列,要引用 ColumnB 或 ColumnC,这两列必须能为 ColumnA 中的每个值返回单个值的聚合函数中的参数。选择列表中包含诸如 MAX (ColumnB)、SUM (ColumnC) 或 AVG (ColumnC) 之类的表达式是合法的:

SELECT ColumnA,
MAX(ColumnB) AS MaxB,
SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA

该选择语句返回两行,为 ColumnA 中的每个唯一值各返回一行:

ColumnA MaxB SumC
----------- ---- -----------
1 ghi 18
2 mno 11

(2 row(s) affected)

但是,选择列表中只包含 ColumnB 表达式是不合法的:

SELECT ColumnA,
ColumnB,
SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA

由于 GROUP BY 关键字只能返回一行,该行 ColumnA 中的值为 1,因此无法返回与 ColumnA 中的值 1 关联的 ColumnB 的三个值(abc、def 和 ghi)。

不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING 子句,除非它们所在的函数返回的值具有其它数据类型。这样的函数包括 SUBSTRING 和 CAST。
kevin214 2003-10-09
  • 打赏
  • 举报
回复
大力解释的很明白!谢谢!
谢谢各位了!

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧