• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
向往
博客园    首页    新随笔    联系   管理    订阅  订阅

COMPUTE 与COMPUTE BY子句

12.1.2  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所示。

 

图12.6 使用COMPUTE语句

 

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

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

完整的设计步骤如下。

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

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

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

图12.7 使用COMPUTE BY语句

提示    
(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所示。

图12.8 在聚合函数COMPUTE BY中使用两个组合字段


提示    
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所示。

图12.9 COMPUTE BY语句相关字段出现顺序不一样时出现错误

可以看到,因为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所示。

 

图12.10 使用COMPUTE BY语句

 

posted on 2011-10-21 21:09  向往  阅读(3965)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3