Welcome 微信登录

首页 / 数据库 / MySQL / 教你怎样分类、分组以及总计SQL数据

您需要了解如何使用某些SQL子句和运算符来安排SQL数据,从而对它进行高效分析。下面这些建议告诉您如何建立语句,获得您希望的结果。 以有意义的方式安排数据可能是一种挑战。有时您只需进行简单分类。通常您必须进行更多处理——进行分组以利于分析与总计。可喜的是,SQL提供了大量用于分类、分组和总计的子句及运算符。下面的建议将有助于您了解何时进行分类、何时分组、何时及如何进行总计。欲了解每个子句和运算符的详细信息,请查看在线书籍。 1、分类排序 通常,我们确实需要对所有数据进行排序。SQL的ORDER BY子句将数据按字母或数字顺序进行排列。因此,同类数据明显分类到各个组中。然而,这些组只是分类的结果,它们并不是真正的组。ORDER BY显示每一个记录,而一个组可能代表多个记录。 2、减少组中的相似数据 分类与分组的最大不同在于:分类数据显示(任何限定标准内的)所有记录,而分组数据不显示这些记录。GROUP BY子句减少一个记录中的相似数据。例如,GROUP BY能够从重复那些值的源文件中返回一个唯一的邮政编码列表:
SELECT ZIPFROM CustomersGROUP BY ZIP
仅包括那些在GROUP BY和SELECT列列表中字义组的列。换句话说,SELECT列表必须与GROUP列表相匹配。只有一种情况例外:SELECT列表能够包含聚合函数。(而GROUP BY不支持聚合函数。) 记住,GROUP BY不会对作为结果产生的组分类。要对组按字母或数字顺序排序,增加一个ORDER BY子句(#1)。另外,在GROUP BY子句中您不能引用一个有别名的域。组列必须在根本数据中,但它们不必出现在结果中。 3、分组前限定数据 您可以增加一个WHERE子句限定由GROUP BY分组的数据。例如,下面的语句仅返回肯塔基地区顾客的邮政编码列表。
SELECT ZIPFROM CustomersWHERE State = "KY"GROUP BY ZIP
在GROUP BY子句求数据的值之前,WHERE对数据进行过滤,记住这一点很重要。 和GROUP BY一样,WHERE不支持聚合函数。 4、返回所有组 当您用WHERE过滤数据时,得到的组只显示那些您指定的记录。符合组定义但不满足子句条件的数据将不会出现在组中。不管WHERE条件如何,如果您想包括所有数据,增加一个ALL子句。例如,在前面的语句中增加一个ALL子句会返回所有邮政编码组,而不仅仅是肯塔基地区的组。
SELECT ZIPFROM CustomersWHERE State = "KY"GROUP BY ALL ZIP
照这个样子,这两个子句会造成冲突,您可能不会以这种方式使用ALL子句。当您用聚合求一个列的值时,应用ALL子句很方便。例如,下面的语句计算每个肯塔基邮政编码的顾客数目,同时显示其它邮政编码值。
SELECT ZIP, Count(ZIP) AS KYCustomersByZIPFROM CustomersWHERE 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 CustomersByZIPFROM CustomersGROUP BY ZIPHAVING Count(ZIP) = 1
仅仅那些只有一名顾客的组出现在结果中。
  • 1
  • 2
  • 下一页
【内容导航】
第1页:教你怎样分类、分组以及总计SQL数据第2页:教你怎样分类、分组以及总计SQL数据
手工来创建数据库的全部脚本及说明持续数据保护方案打破传统备份的局限相关资讯      SQL 
  • SQL 新手指南  (09/10/2015 10:57:53)
  • SQL导入txt以及SQL中的时间格式操  (01/25/2015 11:35:04)
  • SQL 事务及实例演示  (08/12/2014 10:36:37)
  • SQL 中的正则函数  (06/28/2015 15:59:48)
  • SQL 集合(笔记)  (01/15/2015 20:19:06)
  • Oracle shell调用SQL操作DB  (02/03/2014 10:48:18)
本文评论 查看全部评论 (0)
表情: 姓名: 字数