数据库中sum与top的用法简介

149 篇文章 2 订阅

数据库中sum的用法

数据库中sum的用法的用法你知道吗?下面小编就跟你们详细介绍下数据库中sum的用法的用法,希望对你们有用。

  数据库中sum的用法的用法如下:

  根据BOL中解释COUNT用来返回组中的项数。

  COUNT(*)返回组中的项数。包括 NULL 值和重复项

  COUNT(ALL expression):对组中的每一行都计算 expression 并返回非空值的数量。默认值。

  COUNT(DISTINCT expression):对组中的每一行都计算 expression 并返回唯一非空值的数量。

  ID Value

  ----------- --------------------------------------------------

  1 A

  2 B

  2 B

  3 B

  4 NULL

  select COUNT(* ) from Table_1

  -----------

  5

  SELECT COUNT(Value) FROM Table_1

  -----------

  4

  SELECT COUNT(DISTINCT Value) FROM Table_1

  -----------

  2

  SUM返回表达式中所有值的和或仅非重复值的和。SUM 只能用于数字列。空值将被忽略

  ID Value

  ----------- -----------

  1 1

  2 2

  3 3

  4 4

  5 NULL

  6 5

  7 5

  SELECT SUM(Value) From Table_1

  -----------

  20

  SELECT SUM(DISTINCT Value) From Table_1

  -----------

  15

  以Northwind数据库中的Employees,Orders表为例,列出所有雇员的姓名以及其拥有的Order的个数。分别用Count()和SUM()实现。

  SELECT e.EmployeeID,FirstName,LastName,Count(O.EmployeeID) AS OrderCount

  FROM dbo.Employees AS E LEFT JOIN dbo.Orders AS O

  ON E.EmployeeID = O.EmployeeID

  Group By E.EmployeeID,FirstName,LastName

  SELECT e.EmployeeID,FirstName,LastName,SUM(CASE WHEN O.EmployeeID IS NULL THEN 0 ELSE 1 END) AS OrderCount

  FROM dbo.Employees AS E LEFT JOIN dbo.Orders AS O

  ON E.EmployeeID = O.EmployeeID

  Group By E.EmployeeID,FirstName,LastName

  注意的是这里一定不能用COUNT(*),因为COUNT(*)是计算行数,对于没有定单的用户也是为1。只有在JOIN的情况下,COUNT(*)才等效于Count(O.EmployeeID

  附:这两个表的定义。

  USE [Northwind]

  GO

  /****** Object: Table [dbo].[Employees] Script Date: 01/13/2012 22:57:44 ******/

  SET ANSI_NULLS ON

  GO

  SET QUOTED_IDENTIFIER ON

  GO

  CREATE TABLE [dbo].[Employees](

  [EmployeeID] [int] IDENTITY(1,1) NOT NULL,

  [LastName] [nvarchar](20) NOT NULL,

  [FirstName] [nvarchar](10) NOT NULL,

  [Title] [nvarchar](30) NULL,

  [TitleOfCourtesy] [nvarchar](25) NULL,

  [BirthDate] [datetime] NULL,

  [HireDate] [datetime] NULL,

  [Address] [nvarchar](60) NULL,

  [City] [nvarchar](15) NULL,

  [Region] [nvarchar](15) NULL,

  [PostalCode] [nvarchar](10) NULL,

  [Country] [nvarchar](15) NULL,

  [HomePhone] [nvarchar](24) NULL,

  [Extension] [nvarchar](4) NULL,

  [Photo] [image] NULL,

  [Notes] [ntext] NULL,

  [ReportsTo] [int] NULL,

  [PhotoPath] [nvarchar](255) NULL,

  CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED

  (

  [EmployeeID] ASC

  )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

  ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

  GO

  ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD CONSTRAINT [FK_Employees_Employees] FOREIGN KEY([ReportsTo])

  REFERENCES [dbo].[Employees] ([EmployeeID])

  GO

  ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Employees]

  GO

  ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD CONSTRAINT [CK_Birthdate] CHECK (([BirthDate] < getdate()))

  GO

  ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [CK_Birthdate]

  GO

  USE [Northwind]

  GO

  /****** Object: Table [dbo].[Orders] Script Date: 01/13/2012 23:02:09 ******/

  SET ANSI_NULLS ON

  GO

  SET QUOTED_IDENTIFIER ON

  GO

  CREATE TABLE [dbo].[Orders](

  [OrderID] [int] IDENTITY(1,1) NOT NULL,

  [CustomerID] [nchar](5) NULL,

  [EmployeeID] [int] NULL,

  [OrderDate] [datetime] NULL,

  [RequiredDate] [datetime] NULL,

  [ShippedDate] [datetime] NULL,

  [ShipVia] [int] NULL,

  [Freight] [money] NULL,

  [ShipName] [nvarchar](40) NULL,

  [ShipAddress] [nvarchar](60) NULL,

  [ShipCity] [nvarchar](15) NULL,

  [ShipRegion] [nvarchar](15) NULL,

  [ShipPostalCode] [nvarchar](10) NULL,

  [ShipCountry] [nvarchar](15) NULL,

  CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED

  (

  [OrderID] ASC

  )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

  ) ON [PRIMARY]

  GO

  ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([CustomerID])

  REFERENCES [dbo].[Customers] ([CustomerID])

  GO

  ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers]

  GO

  ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Employees] FOREIGN KEY([EmployeeID])

  REFERENCES [dbo].[Employees] ([EmployeeID])

  GO

  ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Employees]

  GO

  ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Shippers] FOREIGN KEY([ShipVia])

  REFERENCES [dbo].[Shippers] ([ShipperID])

  GO

  ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Shippers]

  GO

  ALTER TABLE [dbo].[Orders] ADD CONSTRAINT [DF_Orders_Freight] DEFAULT (0) FOR [Freight]

  GO

数据库中top的用法

数据库中top的用法的用法你知道吗?下面微点阅读(m.weidianyuedu.com)小编就跟你们详细介绍下数据库中top的用法的用法,希望对你们有用。

  数据库中top的用法的用法如下:

  在编写程序中,我们可能遇到诸如查询最热门的5篇文章或返回满足条件的n条记录的情况,在SQL语言中,可以使用TOP关键字来实现。

  TOP关键字在SQL语言中用来限制返回结果集中的记录条数,其使用方法有两种形式,下面做以详细的介绍:

  (1)返回确定数目的记录个数

  语法格式: SELECT TOP n <列名表> FROM <表名> [查询条件]

  其中,n为要返回结果集中的记录条数

  (2)返回结果集中指定百分比的记录数

  语法格式: SELECT TOP n PERCENT <列名表> FROM <表名> [查询条件]

  其中,n为所返回的记录数所占结果集中记录数目的百分比数

  举例说明:

  假设数据库中有一个表存储的为学生的信息(student):

  (1)SELECT TOP 20 * FROM student --查询前20名学生的信息

  (2)SELECT TOP 20 * PERCENT FROM student --查询学生表中前20%的学生信息

  在具体使用过程中,可以结合条件子句和排序子句(如何进行排序)等实现较为丰富的功能,如:

  (1)查询年龄(sage)大于23的前20名学生的信息

  查询语句为:SELECT TOP 20 * FROM student WHERE sage > 23

  (2)查询年龄较为大的前20名学生的信息

  查询语句为: SELECT TOP 20 * FROM student ORDER BY sage DESC

  在假设有一个表为新闻表(news),其列名定义如下:

  ID 新闻编号, 整数型 自增字段

  Title 新闻标题 , 字符串型(varchar)

  Content 新闻内容,Text型

  Hits 点击次数, 整数类型

  AddDateTime 添加时间 ,字符串(YYYY-MM-DD)

  则要求查询:

  (1)查询最新10条新闻,只列出新闻标题和添加时间

  SELECT TOP 10 Title, AddDateTime FROM News ORDER BY AddDateTime DESC

  说明:如果新闻增加时是按时间发生的先后顺序添加的话,也可以按ID来排序(因为ID为自增字段,ID越大的应越新),即:

  SELECT TOP 10 Title, AddDateTime FROM News ORDER BY ID DESC

  (2)查询最热门的8条新闻的标题和点击次数

  查询语句为: SELECT TOP 8 Title, Hits FROM News ORDER BY Hits DESC

转自:https://www.weidianyuedu.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值