数据库中如何分类、分组并总计SQL数据

文章作者 100test 发表时间 2008:01:28 09:27:16
来源 100Test.Com百考试题网


  您需要了解如何使用某些SQL子句和运算符来安排SQL数据,从而对它进行高效分析。下面这些建议告诉您如何建立语句,获得您希望的结果。

  以有意义的方式安排数据可能是一种挑战。有时您只需进行简单分类。通常您必须进行更多处理——进行分组以利于分析与总计。可喜的是,SQL提供了大量用于分类、分组和总计的子句及运算符。下面的建议将有助于您了解何时进行分类、何时分组、何时及如何进行总计。

  1、分类排序

  通常,我们确实需要对所有数据进行排序。SQL的ORDER BY子句将数据按字母或数字顺序进行排列。因此,同类数据明显分类到各个组中。然而,这些组只是分类的结果,它们并不是真正的组。ORDER BY显示每一个记录,而一个组可能代表多个记录。

  2、减少组中的相似数据

  分类与分组的最大不同在于:分类数据显示(任何限定标准内的)所有记录,而分组数据不显示这些记录。GROUP BY子句减少一个记录中的相似数据。例如,GROUP BY能够从重复那些值的源文件中返回一个唯一的邮政编码列表:

  SELECT ZIP
  FROM Customers
  GROUP BY ZIP

  仅包括那些在GROUP BY和SELECT列列表中字义组的列。换句话说,SELECT列表必须与GROUP列表相匹配。只有一种情况例外:SELECT列表能够包含聚合函数。(而GROUP BY不支持聚合函数。)

  记住,GROUP BY不会对作为结果产生的组分类。要对组按字母或数字顺序排序,增加一个ORDER BY子句(#1)。另外,在GROUP BY子句中您不能引用一个有别名的域。组列必须在根本数据中,但它们不必出现在结果中。

  3、分组前限定数据

  您可以增加一个WHERE子句限定由GROUP BY分组的数据。例如,下面的语句仅返回肯塔基地区顾客的邮政编码列表。

  SELECT ZIP
  FROM Customers
  WHERE State = KY
  GROUP BY ZIP

  在GROUP BY子句求数据的值之前,WHERE对数据进行过滤,记住这一点很重要。

  和GROUP BY一样,WHERE不支持聚合函数。

  4、返回所有组

  当您用WHERE过滤数据时,得到的组只显示那些您指定的记录。符合组定义但不满足子句条件的数据将不会出现在组中。不管WHERE条件如何,如果您想包括所有数据,增加一个ALL子句。例如,在前面的语句中增加一个ALL子句会返回所有邮政编码组,而不仅仅是肯塔基地区的组。

  SELECT ZIP
  FROM Customers
  WHERE State = KY
  GROUP BY ALL ZIP

  照这个样子,这两个子句会造成冲突,您可能不会以这种方式使用ALL子句。当您用聚合求一个列的值时,应用ALL子句很方便。例如,下面的语句计算每个肯塔基邮政编码的顾客数目,同时显示其它邮政编码值。

  SELECT ZIP, Count(ZIP) AS KYCustomersByZIP
  FROM Customers
  WHERE State = KY
  GROUP BY ALL ZIP

  得到的组由根本数据中的所有邮政编码值构成。但是,聚合列(KYCustomerByZIP)显示为0,因为除肯塔基邮政编码组外没有别的组。

  远程查询不支持GROUP BY ALL。

  5、分组后限定数据

  WHERE子句(#3)在GROUP BY子句之前求数据的值。当您希望在分组以后限定数据时,使用HAVING。通常,不管您使用WHERE还是HAVING,得到的结果相同。但要记住,这两个子句不能互换,这点很重要。如果您存在疑问,这里有一条应用指南:过滤记录时使用WHERE.过滤组时使用HAVING。

  一般,您会用HAVING,利用聚合来求一个组的值。例如,下面的语句返回一个邮政编码列表,但这个表内可能不包含根本数据源中的每个邮政编码:

  SELECT ZIP, Count(ZIP) AS CustomersByZIP
  FROM Customers
  GROUP BY ZIP
  HAVING Count(ZIP) = 1

  仅仅那些只有一名顾客的组出现在结果中。


相关文章


解读IDS入侵检测系统术语
数据库常问的两个问题看看专家们怎么答
SQLServer分布式分区视图分解数据表
构造SQLServer安全门
数据库中如何分类、分组并总计SQL数据
ORACLE数据库的统计数据及其生成方式
SQLServer7.0数据库的六种数据移动方法
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛