Sql 需要了解SELECT查询的帮助吗
我有一个问题。它只使用Northwind数据库中的一个表Customers。 我完全不知道它是如何工作的,它的意图是什么。我希望这里有很多DBA,所以我要求解释一下。特别是不知道OVER和PARTITION在这里做什么Sql 需要了解SELECT查询的帮助吗,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我有一个问题。它只使用Northwind数据库中的一个表Customers。 我完全不知道它是如何工作的,它的意图是什么。我希望这里有很多DBA,所以我要求解释一下。特别是不知道OVER和PARTITION在这里做什么 WITH NumberedWomen AS ( SELECT CustomerId ,ROW_NUMBER() OVER ( PARTITION BY c.Country ORDE
WITH NumberedWomen AS
(
SELECT CustomerId ,ROW_NUMBER() OVER
(
PARTITION BY c.Country
ORDER BY LEN(c.CompanyName) ASC
)
women
FROM Customers c
)
SELECT * FROM NumberedWomen WHERE women > 3
如果您需要db模式,则此函数:
ROW_NUMBER() OVER (PARTITION BY c.Country ORDER BY LEN(c.CompanyName) ASC)
将连续行号指定给每个国家/地区内的记录,并按LENcompanyName对记录进行排序
如果您有这些数据:
country companyName
US Apple
US Google
UK BAT
UK BP
US GM
,然后查询将从1到3的数字分配给美国公司,从1到2的数字分配给英国公司,并按名称长度排序:
country companyName ROW_NUMBER()
US GM 1
US Apple 2
US Google 3
UK BP 1
UK BAT 2
此功能:
ROW_NUMBER() OVER (PARTITION BY c.Country ORDER BY LEN(c.CompanyName) ASC)
将连续行号指定给每个国家/地区内的记录,并按LENcompanyName对记录进行排序
如果您有这些数据:
country companyName
US Apple
US Google
UK BAT
UK BP
US GM
,然后查询将从1到3的数字分配给美国公司,从1到2的数字分配给英国公司,并按名称长度排序:
country companyName ROW_NUMBER()
US GM 1
US Apple 2
US Google 3
UK BP 1
UK BAT 2
行数是一个排名函数
OVER告诉它如何创建排名数字
PARTITION BY[expression]告诉ROW_NUMBER函数在[expression]包含新值时重新开始排序
在您的情况下,对于每个国家,都会创建一系列以1开头的数字。在一个国家内,公司按其名称的长度排序。较短的名称=较低的级别
最后一个问题是:
从NumberedWomen中选择*,其中women>3
选择所有客户,除非公司国家/地区组合是同一国家/地区中具有3个最短名称的其中一个公司的一部分。行号是一个排名函数
OVER告诉它如何创建排名数字
PARTITION BY[expression]告诉ROW_NUMBER函数在[expression]包含新值时重新开始排序
在您的情况下,对于每个国家,都会创建一系列以1开头的数字。在一个国家内,公司按其名称的长度排序。较短的名称=较低的级别
最后一个问题是:
从NumberedWomen中选择*,其中women>3
选择所有客户,除非公司国家/地区组合是同一国家/地区中具有3个最短名称的公司之一。公司名称的长度与女性有什么关系?谁会给他们编号?@sjngm不知道,不是我的代码。开发商一定很无聊。公司名称的长度与女性有什么关系?谁会给他们编号?@sjngm不知道,不是我的代码。开发商一定很无聊。