快速掌握如何使用SQL Server来过滤数据

作者:38107 时间:2009-01-15 13:27:00 

我们知道,关系型数据一般以规范化的形式保存,也就是说你应该尽可能少地重复数据;在正常情况下,表与表之间仅通过各种键值实现关联。进一步地讲,规范化的含义就是:你不能在数据库中保存计算后的值,而你只能在需要的时候临时计算数据库中保存的值。

对数据进行某些分析通常是很重要的。比方说,你或许想知道哪些产品的定单最多或者哪些定单的利润最大。这些问题都要求你针对自己的SQL语句创建执行过滤规则的公式。其中最重要的语句之一就是GROUP BY子句。

◆Northwind数据库中的定单

Northwind数据库是包含在SQL Server安装软件中的两个示范数据库。这个数据库虽然谈不上完美无缺但也足够满足我们讨论GROUP BY语句的目的了。原因之一是它工作原理清晰,运行良好,包含了一整套标准的数据表,比如Customers(客户)、Orders(定单)、Order Details(定单细节)和处理定单的Products(产品)。

◆表的结构模式

如果你想查看各个定单的OrderID和ProductID ,以下的SQL命令可以满足要求:

以下为引用的内容:

SELECT o.OrderID, od.ProductID

FROM Orders o, [Order Details] od

WHERE o.OrderID = od.OrderID

这样你就通过OrderID字段把Orders和Order Details连接了起来。给出的结果列表即显示各定货条目的OrderID和ProductID。

你可以从这个列表中找到条目数量最大的定单。可是,再想想,要能简单地要求数据库计算出需要的条目数目不更方便吗?如果你不关心单个条目而只想知道订购条目数量最大的定单,那么你可以采用以下的SQL语句:

以下为引用的内容:

SELECT o.OrderID, Count(od.ProductID) as NumItems

FROM Orders o, [Order Details] od

WHERE o.OrderID = od.OrderID
 
这样就可以总计出产品的数量并用一个名为NumItems的新字段来显示总数。可是,如果你执行该语句则可能得到以下错误:

以下为引用的内容:

Server: Msg 8118, Level 16, State 1, Line 1

选择语句中的'o.OrderID'列是无效的,因为它没有包含在汇集函数之内而且没有相应的GROUP BY 子句。

在这种情况下,你实际上在总计ProductID,但OrderID却没有被计算总和或者有其他操作施加于其上。

其实这个示例中计算的并不是订购产品条目的总数而是特定订购产品条目的数目。换句话说,你可以看到某一特定定单包括三种产品,但却并不能表示客户各订购了5种。你得到的正是按照定单统计的产品总量。你应该用GROUP BY字句来查看订购产品的总数。

标签:
0
投稿

猜你喜欢

  • SQL为什么不建议执行超过3表以上的多表关联查询

    2024-01-28 07:58:00
  • [ASP]利用 xmlhttp 分块上传文件

    2008-07-04 14:14:00
  • thinkphp(php)插件钩子(hooks)分析的简单实现机制

    2023-05-25 09:27:58
  • python manim实现排序算法动画示例

    2021-11-10 10:41:58
  • JS实现FLASH幻灯片图片切换效果的方法

    2024-04-22 13:01:57
  • Python企业编码生成系统之系统主要函数设计详解

    2021-05-11 20:43:49
  • Python之tkinter进度条Progressbar用法解读

    2023-07-15 17:14:57
  • js表格拖选动态效果COOL而实用

    2007-08-05 12:07:00
  • 关于torch中tensor数据类型的转换

    2022-07-16 20:59:59
  • IIS+PHP添加对webp格式图像的支持配置方法

    2023-05-28 11:20:11
  • jquery each的几种常用的使用方法示例

    2024-04-09 19:48:49
  • 仿dw8代码折叠功能的HTML编辑器

    2008-04-29 21:19:00
  • 详解Mysql查询条件中字符串尾部有空格也能匹配上的问题

    2024-01-13 11:06:50
  • 基于python实现MUI区域滚动

    2023-11-04 02:38:52
  • 使用Python实现企业微信的自动打卡功能

    2021-02-27 02:41:34
  • 让你Python到很爽的加速递归函数的装饰器

    2022-10-23 13:04:47
  • Python实现公历(阳历)转农历(阴历)的方法示例

    2021-08-02 09:54:44
  • django model通过字典更新数据实例

    2021-08-15 13:00:15
  • django第一个项目127.0.0.1:8000不能访问的解决方案详析

    2021-05-21 14:01:38
  • python tkinter canvas使用实例

    2021-07-11 23:49:50
  • asp之家 网络编程 m.aspxhome.com