COMPUTE 与COMPUTE BY子句

COMPUTE BY子句可以在结果集内生成控制中断和小计,得到更详细的或总的记录。它把数据分成较小的组,然后为每组建立详细记录结果数据集(如SELECT),也可为每组产生总的记录(如GROUP BY)。在COMPUT BY中,定义BY子句不是必要的。如果没有定义BY子句,则认为整个表为一个组,并且只有两个结果数据集产生,一个拥有所有的详细记录,另一个只有一行,即拥有总记录。

语法:

[ COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM }
( EXPRESSION ) } [ ,...n ]
[BY EXPRESSION [ ,...n ] ]
]

其中AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM表示可以使用的聚合函数。EXPRESSION表示计算的列名。EXPRESSION必须出现在选择列表中,并且必须被指定为与选择列表中的某个表达式相同。BY EXPRESSION表示在结果集中生成控制中断和小计。

【示例6】在MyCompany数据库中,统计Products表中所有商品的总价值。

完整的设计步骤如下。

(1) 在查询编辑器中输入以下代码:

SELECT ProductName,Amount,price,total
FROM Products
COMPUTE SUM(total)


(2) 执行该语句,查询结果如图12.6所示。
[img]/upload/attachment/79270/b6c4af15-815b-328d-bd8b-61d095b22a19.jpg[/img]

通过上面的查询,可以看到最后一行,表中的所有商品的总价值统计为4032730。

【示例7】在MyCompany数据库中,统计Products表中各国商品的总价值,并查询产品的名称、数量、价格,同时求每一国家的商品总价值,并按照国家分组显示查询的结果。

完整的设计步骤如下。

(1) 在查询编辑器中输入以下代码:
SELECT ProductName,Amount,price,total,Country
FROM Products
ORDER BY Country
COMPUTE SUM(total)BY Country


(2) 执行该语句,查询结果如图12.7所示。

[img]/upload/attachment/79272/959ce2a0-b18f-3152-b756-557f059c13a5.jpg[/img]

[b]提示[/b]
(1) 当在COMPUTE中使用BY时,要求在所有组合字段中必须包含ORDER BY语句。

(2) 在COMPUTE子句指定的行聚合函数中,不允许使用DISTINCT关键字。

(3) 由于包含COMPUTE 的语句生成表并且这些表的汇总结果不存储在数据库中,因此在SELECT INTO 语句中不能使用 COMPUTE。因而,任何由 COMPUTE 生成的计算结果都不会出现在用 SELECT INTO 语句创建的新表内。

【示例8】在MyCompany数据库中,按照国家和出货日期统计Products表中的商品的总价值,并查询产品的名称、数量、价格、各自品种商品的总价值、出货日期和国家,按照国家和出货日期分组,显示查询的结果。

完整的设计步骤如下。

(1) 在查询编辑器中输入以下代码:

SELECT ProductName,Amount,price,total,outday,Country
FROM Products
ORDER BY Country,outday
COMPUTE SUM(total)BY Country,outday


(2) 执行该语句,查询结果如图12.8所示。

[img]/upload/attachment/79274/6a4b9c71-98e1-383f-befa-83db7b947e1b.jpg[/img]

[b]提示[/b]
COMPUTE BY语句后出现的字段必须是ORDER BY语句后出现的字段的子集,并且COMPUTE BY语句后出现的字段必须和ORDER BY语句后面的字段具有相同的出现顺序,并以相同的表达式开头,中间不能遗漏任何表达式。

【示例9】完善示例8。

完整的设计步骤如下。

(1) 在查询编辑器中输入以下代码:
SELECT ProductName,Amount,price,total,outday,Country
FROM products
ORDER BY outday,Country
COMPUTE SUM(total)BY Country,outday


(2) 单击【执行】按钮,将出现错误,如图12.9所示。

[img]/upload/attachment/79276/19bbb844-fa7c-3fd9-bf0d-4a03761004dd.jpg[/img]


可以看到,因为COMPUTE BY语句后面出现的字段与ORDER BY后面的字段顺序不一样,因此出现了错误。

(3) 下面的语句是可以的:

SELECT ProductName,Amount,price,total,outday,Country
FROM products
ORDER BY Country,outday
COMPUTE SUM(total)BY Country


(4) 因为COMPUTE BY语句后面出现的字段是ORDER BY后面出现的字段的子集,因此可以执行,查询结果如图12.10所示。

[img]/upload/attachment/79278/6c168e09-a092-3154-890e-56f5dc4efd0b.jpg[/img]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值