扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:ZDNET 来源:ZDNET 2007年9月10日
关键字: SQL Server SQL Server 各版本 过滤 数据库
关系型数据通常以规范化形式保存,就是说你应该尽可能少地重复数据;通常情况下,表与表之间仅通过各种键值实现关联。进一步地讲,规范化的含义就是:你不能在数据库中保存计算后的值,而你只能在需要的时候临时计算数据库中保存的值。
对数据进行某些分析通常是很重要的。比方说,你或许想知道哪些产品的定单最多或者哪些定单的利润最大。这些问题都要求你针对自己的SQL语句创建执行过滤规则的公式。其中最重要的语句之一就是GROUP BY子句。
Northwind数据库中的定单
Northwind数据库是包含在SQL Server安装软件中的两个示范数据库。这个数据库虽然谈不上完美无缺但也足够满足我们讨论GROUP BY语句的目的了。原因之一是它工作原理清晰,运行良好,包含了一整套标准的数据表,比如Customers(客户)、Orders(定单)、Order Details(定单细节)和处理定单的Products(产品)。
表的结构模式
如果你想查看各个定单的OrderID和ProductID ,以下的SQL命令可以满足要求:
|
这样你就通过OrderID字段把Orders和Order Details连接了起来。给出的结果列表即显示各定货条目的OrderID和ProductID。
你可以从这个列表中找到条目数量最大的定单。可是,再想想,要能简单地要求数据库计算出需要的条目数目不更方便吗?如果你不关心单个条目而只想知道订购条目数量最大的定单,那么你可以采用以下的SQL语句:
|
这样就可以总计出产品的数量并用一个名为NumItems的新字段来显示总数。可是,如果你执行该语句则可能得到以下错误:
|
选择语句中的'o.OrderID'列是无效的,因为它没有包含在汇集函数之内而且没有相应的GROUP BY 子句。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者