should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

111
external/duckdb/test/sqlserver/scrape.py vendored Normal file
View File

@@ -0,0 +1,111 @@
from bs4 import BeautifulSoup
import requests
import re
pages = [
'avg',
'count',
'max',
'min',
'stdev',
'sum',
'var',
'cume-dist',
'first-value',
'last-value',
'lag',
'lead',
'percent-rank',
'dense-rank',
'ntile',
'rank',
'row-number',
]
# crash!
# url = 'https://docs.microsoft.com/en-us/sql/t-sql/functions/first-value-transact-sql?view=sql-server-2017'
url = 'https://docs.microsoft.com/en-us/sql/t-sql/functions/%s-transact-sql?view=sql-server-2017'
def transform_result_set(tblstr):
# find the row with the --- --- etc that indicates col count
cols = len(re.findall(r"-{3,}( |\n)", tblstr))
if cols < 1:
return ""
print("REQUIRE(result->ColumnCount() == %d);" % cols)
lineiterator = iter(tblstr.splitlines())
in_data = False
result = []
for c in range(0, cols):
result.append([])
for line in lineiterator:
if '---' in line:
in_data = True
continue
if not in_data:
continue
if 'row(s) affected' in line:
continue
if re.match(r"^\s*$", line):
continue
# now we have a real data line, split by space and trim
fields = re.split(r"\s{2,}", line)
if len(fields) < cols:
raise ValueError('Not enough fields')
# print("// ", end='')
for c in range(0, cols):
f = fields[c].strip()
if f == '':
raise ValueError('Empty field')
if re.match(r"^\d+[\d,]*\.\d+$", f):
f = f.replace(',', '')
# print(f + '\t', end='')
needs_quotes = False
try:
float(f)
except ValueError:
needs_quotes = True
if f == "NULL":
f = 'Value()'
needs_quotes = False
if needs_quotes:
f = '"%s"' % f
result[c].append(f)
# print()
for c in range(0, cols):
print('REQUIRE(CHECK_COLUMN(result, %d, {%s}));' % (c, ','.join(result[c])))
for p in pages:
r = requests.get(url % p)
print('\n\n// FROM %s\n' % url % p)
soup = BeautifulSoup(r.content, 'html.parser')
look_for_answer = False
for code in soup.find_all('code'):
classes = code.get('class')
text = code.get_text()
if text.count('\n') < 2:
continue
if 'SELECT ' in text and 'FROM ' in text:
if 'dbo.' in text or 'sys.' in text:
continue
query = text.strip()
query = re.sub(r"(^|\n)(GO|USE|DECLARE).*", "", query)
query = query.replace('\n', ' ')
query = re.sub(r"\s+", " ", query)
print('\n\nresult = con.Query("%s");\nREQUIRE(!result->HasError());' % query.replace('"', '\\"'))
look_for_answer = True
elif look_for_answer:
# print('-- ' + text.replace('\n', '\n-- ') + '\n')
transform_result_set(text)
look_for_answer = False

View File

@@ -0,0 +1,124 @@
# name: test/sqlserver/sqlserver_cte.test
# group: [sqlserver]
# https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15
# Recursive CTEs
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=1
statement ok
PRAGMA default_null_order='NULLS LAST'
statement ok
CREATE TABLE MyEmployees
(
EmployeeID smallint NOT NULL,
FirstName varchar(30) NOT NULL,
LastName varchar(40) NOT NULL,
Title varchar(50) NOT NULL,
DeptID smallint NOT NULL,
ManagerID int NULL,
CONSTRAINT PK_EmployeeID PRIMARY KEY (EmployeeID)
);
statement ok
INSERT INTO MyEmployees VALUES
(1, N'Ken', N'Sánchez', N'Chief Executive Officer',16,NULL)
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)
,(16, N'David',N'Bradley', N'Marketing Manager', 4, 273)
,(23, N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);
# Using a recursive common table expression to display multiple levels of recursion
query IIII
WITH RECURSIVE DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS
(
SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel
FROM MyEmployees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1
FROM MyEmployees AS e
INNER JOIN DirectReports AS d
ON e.ManagerID = d.EmployeeID
)
SELECT ManagerID, EmployeeID, Title, EmployeeLevel
FROM DirectReports
ORDER BY EmployeeLevel, ManagerID, EmployeeID;
----
NULL 1 Chief Executive Officer 0
1 273 Vice President of Sales 1
273 16 Marketing Manager 2
273 274 North American Sales Manager 2
273 285 Pacific Sales Manager 2
16 23 Marketing Specialist 3
274 275 Sales Representative 3
274 276 Sales Representative 3
285 286 Sales Representative 3
# Using a recursive common table expression to display two levels of recursion
query IIII
WITH RECURSIVE DirectReports(ManagerID, EmployeeID, Title, EmployeeLevel) AS
(
SELECT ManagerID, EmployeeID, Title, 0 AS EmployeeLevel
FROM MyEmployees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.ManagerID, e.EmployeeID, e.Title, EmployeeLevel + 1
FROM MyEmployees AS e
INNER JOIN DirectReports AS d
ON e.ManagerID = d.EmployeeID
)
SELECT ManagerID, EmployeeID, Title, EmployeeLevel
FROM DirectReports
WHERE EmployeeLevel <= 2
ORDER BY EmployeeLevel, ManagerId, EmployeeId;
----
NULL 1 Chief Executive Officer 0
1 273 Vice President of Sales 1
273 16 Marketing Manager 2
273 274 North American Sales Manager 2
273 285 Pacific Sales Manager 2
# Using a recursive common table expression to display a hierarchical list
query IIII
WITH RECURSIVE DirectReports(Name, Title, EmployeeID, EmployeeLevel, Sort)
AS (SELECT e.FirstName || ' ' || e.LastName,
e.Title,
e.EmployeeID,
1,
e.FirstName || ' ' || e.LastName
FROM MyEmployees AS e
WHERE e.ManagerID IS NULL
UNION ALL
SELECT REPEAT ('>' , EmployeeLevel) ||
e.FirstName || ' ' || e.LastName,
e.Title,
e.EmployeeID,
EmployeeLevel + 1,
RTRIM(Sort) || '>' || FirstName || ' ' || LastName
FROM MyEmployees AS e
JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID
)
SELECT EmployeeID, Name, Title, EmployeeLevel
FROM DirectReports
ORDER BY Sort, EmployeeID;
----
1 Ken Sánchez Chief Executive Officer 1
273 >Brian Welcker Vice President of Sales 2
16 >>David Bradley Marketing Manager 3
23 >>>Mary Gibson Marketing Specialist 4
274 >>Stephen Jiang North American Sales Manager 3
276 >>>Linda Mitchell Sales Representative 4
275 >>>Michael Blythe Sales Representative 4
285 >>Syed Abbas Pacific Sales Manager 3
286 >>>Lynn Tsoflias Sales Representative 4

View File

@@ -0,0 +1,649 @@
# name: test/sqlserver/test_sqlserver.test_slow
# description: SQL Server functions tests
# group: [sqlserver]
statement ok
PRAGMA default_null_order='NULLS LAST'
statement ok
PRAGMA threads=4
statement ok
PRAGMA verify_parallelism
statement ok
CREATE SCHEMA Sales;
statement ok
CREATE TABLE Sales.SalesPerson( BusinessEntityID int NOT NULL, TerritoryID int, SalesQuota decimal(22,4), Bonus decimal(22,4) NOT NULL, CommissionPct decimal(10,4) NOT NULL, SalesYTD decimal(22,4) NOT NULL, SalesLastYear decimal(22,4) NOT NULL , rowguid string , ModifiedDate datetime NOT NULL );
statement ok
COPY Sales.SalesPerson FROM 'test/sqlserver/data/SalesPerson.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Sales.SalesTaxRate( SalesTaxRateID int NOT NULL, StateProvinceID int NOT NULL, TaxType tinyint NOT NULL, TaxRate decimal(10,4) NOT NULL , Name string NOT NULL, rowguid string , ModifiedDate datetime NOT NULL );
statement ok
COPY Sales.SalesTaxRate FROM 'test/sqlserver/data/SalesTaxRate.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Sales.SalesPersonQuotaHistory( BusinessEntityID int NOT NULL, QuotaDate datetime NOT NULL, SalesQuota decimal(22,4) NOT NULL, rowguid string , ModifiedDate datetime NOT NULL);
statement ok
COPY Sales.SalesPersonQuotaHistory FROM 'test/sqlserver/data/SalesPersonQuotaHistory.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Sales.SalesTerritory( TerritoryID int NOT NULL, Name string NOT NULL, CountryRegionCode string NOT NULL, Group_ string NOT NULL, SalesYTD decimal(22,4) NOT NULL , SalesLastYear decimal(22,4) NOT NULL , CostYTD decimal(22,4) NOT NULL , CostLastYear decimal(22,4) NOT NULL , rowguid string , ModifiedDate datetime NOT NULL );
statement ok
COPY Sales.SalesTerritory FROM 'test/sqlserver/data/SalesTerritory.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE SCHEMA HumanResources;
statement ok
CREATE TABLE HumanResources.Employee( BusinessEntityID int NOT NULL, NationalIDNumber string NOT NULL, LoginID string NOT NULL, OrganizationNode VARCHAR, OrganizationLevel integer not null, JobTitle string NOT NULL, BirthDate date NOT NULL, MaritalStatus string NOT NULL, Gender string NOT NULL, HireDate date NOT NULL, SalariedFlag string NOT NULL , VacationHours smallint NOT NULL , SickLeaveHours smallint NOT NULL, CurrentFlag string NOT NULL , rowguid string , ModifiedDate datetime NOT NULL);
statement ok
COPY HumanResources.Employee FROM 'test/sqlserver/data/Employee.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE HumanResources.EmployeePayHistory( BusinessEntityID int NOT NULL, RateChangeDate datetime NOT NULL, Rate decimal(22,4) NOT NULL, PayFrequency tinyint NOT NULL, ModifiedDate datetime NOT NULL);
statement ok
COPY HumanResources.EmployeePayHistory FROM 'test/sqlserver/data/EmployeePayHistory.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE HumanResources.EmployeeDepartmentHistory( BusinessEntityID int NOT NULL, DepartmentID smallint NOT NULL, ShiftID tinyint NOT NULL, StartDate date NOT NULL, EndDate date, ModifiedDate datetime NOT NULL );
statement ok
COPY HumanResources.EmployeeDepartmentHistory FROM 'test/sqlserver/data/EmployeeDepartmentHistory.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE HumanResources.Department( DepartmentID smallint NOT NULL, Name string NOT NULL, GroupName string NOT NULL, ModifiedDate datetime NOT NULL );
statement ok
COPY HumanResources.Department FROM 'test/sqlserver/data/Department.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE HumanResources.Shift( ShiftID tinyint NOT NULL, Name string NOT NULL, StartTime string NOT NULL, EndTime string NOT NULL, ModifiedDate datetime NOT NULL );
statement ok
COPY HumanResources.Shift FROM 'test/sqlserver/data/Shift.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE SCHEMA Person;
statement ok
CREATE TABLE Person.Person( BusinessEntityID int NOT NULL, PersonType string NOT NULL, NameStyle string NOT NULL, Title string , FirstName string NOT NULL, MiddleName string, LastName string NOT NULL, Suffix string, EmailPromotion int NOT NULL, AdditionalContactInfo string, Demographics string, rowguid string, ModifiedDate datetime NOT NULL);
statement ok
COPY Person.Person FROM 'test/sqlserver/data/Person.csv.gz' (DELIMITER '|', QUOTE '*', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.BusinessEntityAddress( BusinessEntityID int NOT NULL, AddressID int NOT NULL, AddressTypeID int NOT NULL, rowguid string, ModifiedDate datetime NOT NULL ) ;
statement ok
COPY Person.BusinessEntityAddress FROM 'test/sqlserver/data/BusinessEntityAddress.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.Address( AddressID int NOT NULL, AddressLine1 string NOT NULL, AddressLine2 string, City string NOT NULL, StateProvinceID int NOT NULL, PostalCode string NOT NULL, SpatialLocation string, rowguid string, ModifiedDate datetime NOT NULL );
statement ok
COPY Person.Address FROM 'test/sqlserver/data/Address.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.StateProvince( StateProvinceID int NOT NULL, StateProvinceCode string NOT NULL, CountryRegionCode string NOT NULL, IsOnlyStateProvinceFlag string NOT NULL , Name string NOT NULL, TerritoryID int NOT NULL, rowguid string , ModifiedDate datetime NOT NULL);
statement ok
COPY Person.StateProvince FROM 'test/sqlserver/data/StateProvince.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.CountryRegion( CountryRegionCode string NOT NULL, Name string NOT NULL, ModifiedDate datetime NOT NULL );
statement ok
COPY Person.CountryRegion FROM 'test/sqlserver/data/CountryRegion.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.EmailAddress( BusinessEntityID int NOT NULL, EmailAddressID int NOT NULL, EmailAddress string, rowguid string , ModifiedDate datetime NOT NULL );
statement ok
COPY Person.EmailAddress FROM 'test/sqlserver/data/EmailAddress.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.PersonPhone( BusinessEntityID int NOT NULL, PhoneNumber string NOT NULL, PhoneNumberTypeID int NOT NULL, ModifiedDate datetime NOT NULL );
statement ok
COPY Person.PersonPhone FROM 'test/sqlserver/data/PersonPhone.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Person.PhoneNumberType( PhoneNumberTypeID int NOT NULL, Name string NOT NULL, ModifiedDate datetime NOT NULL );
statement ok
COPY Person.PhoneNumberType FROM 'test/sqlserver/data/PhoneNumberType.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);
statement ok
CREATE SCHEMA Production;
statement ok
CREATE TABLE Production.Product( ProductID int NOT NULL, Name string NOT NULL, ProductNumber string NOT NULL, MakeFlag string NOT NULL , FinishedGoodsFlag string NOT NULL , Color string, SafetyStockLevel smallint NOT NULL, ReorderPoint smallint NOT NULL, StandardCost decimal(22,4) NOT NULL, ListPrice decimal(22,4) NOT NULL, Size string, SizeUnitMeasureCode string, WeightUnitMeasureCode string, Weight decimal(8, 2), DaysToManufacture int NOT NULL, ProductLine string, Class string, Style string, ProductSubcategoryID int, ProductModelID int, SellStartDate datetime NOT NULL, SellEndDate datetime, DiscontinuedDate datetime, rowguid string , ModifiedDate datetime NOT NULL );
statement ok
COPY Production.Product FROM 'test/sqlserver/data/Product.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE TABLE Production.ProductInventory( ProductID int NOT NULL, LocationID smallint NOT NULL, Shelf string NOT NULL, Bin tinyint NOT NULL, Quantity smallint NOT NULL , rowguid string , ModifiedDate datetime NOT NULL );
statement ok
COPY Production.ProductInventory FROM 'test/sqlserver/data/ProductInventory.csv.gz' (DELIMITER ' ', AUTO_DETECT TRUE);
statement ok
CREATE VIEW Sales.vSalesPerson AS SELECT s.BusinessEntityID ,p.Title ,p.FirstName ,p.MiddleName ,p.LastName ,p.Suffix ,e.JobTitle ,pp.PhoneNumber ,pnt.Name AS PhoneNumberType ,ea.EmailAddress ,p.EmailPromotion ,a.AddressLine1 ,a.AddressLine2 ,a.City ,sp.Name AS StateProvinceName ,a.PostalCode ,cr.Name AS CountryRegionName ,st.Name AS TerritoryName ,st.Group_ AS TerritoryGroup ,s.SalesQuota ,s.SalesYTD ,s.SalesLastYear FROM Sales.SalesPerson s INNER JOIN HumanResources.Employee e ON e.BusinessEntityID = s.BusinessEntityID INNER JOIN Person.Person p ON p.BusinessEntityID = s.BusinessEntityID INNER JOIN Person.BusinessEntityAddress bea ON bea.BusinessEntityID = s.BusinessEntityID INNER JOIN Person.Address a ON a.AddressID = bea.AddressID INNER JOIN Person.StateProvince sp ON sp.StateProvinceID = a.StateProvinceID INNER JOIN Person.CountryRegion cr ON cr.CountryRegionCode = sp.CountryRegionCode LEFT OUTER JOIN Sales.SalesTerritory st ON st.TerritoryID = s.TerritoryID LEFT OUTER JOIN Person.EmailAddress ea ON ea.BusinessEntityID = p.BusinessEntityID LEFT OUTER JOIN Person.PersonPhone pp ON pp.BusinessEntityID = p.BusinessEntityID LEFT OUTER JOIN Person.PhoneNumberType pnt ON pnt.PhoneNumberTypeID = pp.PhoneNumberTypeID;
statement ok
CREATE VIEW HumanResources.vEmployeeDepartmentHistory AS SELECT e.BusinessEntityID ,p.Title ,p.FirstName ,p.MiddleName ,p.LastName ,p.Suffix ,s.Name AS Shift ,d.Name AS Department ,d.GroupName ,edh.StartDate ,edh.EndDate FROM HumanResources.Employee e INNER JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID INNER JOIN HumanResources.EmployeeDepartmentHistory edh ON e.BusinessEntityID = edh.BusinessEntityID INNER JOIN HumanResources.Department d ON edh.DepartmentID = d.DepartmentID INNER JOIN HumanResources.Shift s ON s.ShiftID = edh.ShiftID;
# https:docs.microsoft.com/en-us/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017
query RR
SELECT AVG(VacationHours)AS a, SUM(SickLeaveHours) AS b FROM HumanResources.Employee WHERE JobTitle LIKE 'Vice President%';
----
25.000000 97.000000
query IRR
SELECT TerritoryID, AVG(Bonus)as a, SUM(SalesYTD) as b FROM Sales.SalesPerson GROUP BY TerritoryID order by TerritoryID;
----
1 4133.3333333333333333 4502152.2674
2 4100.0000000000000000 3763178.1787
3 2500.0000000000000000 3189418.3662
4 2775.0000000000000000 6709904.1666
5 6700.0000000000000000 2315185.6110
6 2750.0000000000000000 4058260.1825
7 985.0000000000000000 3121616.3202
8 75.0000000000000000 1827066.7118
9 5650.0000000000000000 1421810.9242
10 5150.0000000000000000 4116871.2277
NULL 0.00000000000000000000 1252127.9471
query R
SELECT AVG(DISTINCT ListPrice) FROM Production.Product;
----
437.4042718446601942
query R
SELECT AVG(ListPrice) FROM Production.Product;
----
438.6662500000000000
query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD ,AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY TerritoryID, SalesYear, BusinessEntityID;
----
280 1 2011 1352577.1325 1462795.035400000000 2925590.0708
283 1 2011 1573012.9383 1462795.035400000000 2925590.0708
284 1 2012 1576562.1966 1500717.422466666667 4502152.2674
275 2 2011 3763178.1787 3763178.178700000000 3763178.1787
277 3 2011 3189418.3662 3189418.366200000000 3189418.3662
276 4 2011 4251368.5497 3354952.083300000000 6709904.1666
281 4 2011 2458535.6169 3354952.083300000000 6709904.1666
274 NULL 2010 559697.5639 559697.563900000000 559697.5639
287 NULL 2012 519905.9320 539801.747950000000 1079603.4959
285 NULL 2013 172524.4512 417375.982366666667 1252127.9471
query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD ,AVG(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY SalesYear, TerritoryID, BusinessEntityID;
----
274 NULL 2010 559697.5639 559697.563900000000 559697.5639
280 1 2011 1352577.1325 2449684.049457142857 17147788.3462
283 1 2011 1573012.9383 2449684.049457142857 17147788.3462
275 2 2011 3763178.1787 2449684.049457142857 17147788.3462
277 3 2011 3189418.3662 2449684.049457142857 17147788.3462
276 4 2011 4251368.5497 2449684.049457142857 17147788.3462
281 4 2011 2458535.6169 2449684.049457142857 17147788.3462
284 1 2012 1576562.1966 2138250.719422222222 19244256.4748
287 NULL 2012 519905.9320 2138250.719422222222 19244256.4748
285 NULL 2013 172524.4512 1941678.092600000000 19416780.9260
# https:docs.microsoft.com/en-us/sql/t-sql/functions/count-transact-sql?view=sql-server-2017
query I
SELECT COUNT(DISTINCT JobTitle) FROM HumanResources.Employee;
----
67
query I
SELECT COUNT(*) FROM HumanResources.Employee;
----
290
query IR
SELECT COUNT(*), AVG(Bonus) FROM Sales.SalesPerson WHERE SalesQuota > 25000;
----
14 3472.1428571428571429
query TRRRI
SELECT DISTINCT Name, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept FROM HumanResources.EmployeePayHistory AS eph JOIN HumanResources.EmployeeDepartmentHistory AS edh ON eph.BusinessEntityID = edh.BusinessEntityID JOIN HumanResources.Department AS d ON d.DepartmentID = edh.DepartmentID WHERE edh.EndDate IS NULL ORDER BY Name;
----
Document Control 10.2500 17.7885 14.3884600000000000 5
Engineering 32.6923 63.4615 40.1442166666666667 6
Executive 39.0600 125.5000 68.3034750000000000 4
Facilities and Maintenance 9.2500 24.0385 13.0316000000000000 7
Finance 13.4615 43.2692 23.9350900000000000 10
Human Resources 13.9423 27.1394 18.0248166666666667 6
Information Services 27.4038 50.4808 34.1586300000000000 10
Marketing 13.4615 37.5000 18.4318181818181818 11
Production 6.5000 84.1346 13.5537671794871795 195
Production Control 8.6200 24.5192 16.7746125000000000 8
Purchasing 9.8600 30.0000 18.0202000000000000 14
Quality Assurance 10.5769 28.8462 15.4647333333333333 6
Research and Development 40.8654 50.4808 43.6731000000000000 4
Sales 23.0769 72.1154 29.9719444444444444 18
Shipping and Receiving 9.0000 19.2308 10.8718000000000000 6
Tool Design 8.6200 29.8462 23.5054000000000000 6
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/max-transact-sql?view=sql-server-2017
query R
SELECT MAX(TaxRate) FROM Sales.SalesTaxRate;
----
19.600000
query TRRRI
SELECT DISTINCT Name, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept FROM HumanResources.EmployeePayHistory AS eph JOIN HumanResources.EmployeeDepartmentHistory AS edh ON eph.BusinessEntityID = edh.BusinessEntityID JOIN HumanResources.Department AS d ON d.DepartmentID = edh.DepartmentID WHERE edh.EndDate IS NULL ORDER BY Name;
----
Document Control 10.2500 17.7885 14.3884600000000000 5
Engineering 32.6923 63.4615 40.1442166666666667 6
Executive 39.0600 125.5000 68.3034750000000000 4
Facilities and Maintenance 9.2500 24.0385 13.0316000000000000 7
Finance 13.4615 43.2692 23.9350900000000000 10
Human Resources 13.9423 27.1394 18.0248166666666667 6
Information Services 27.4038 50.4808 34.1586300000000000 10
Marketing 13.4615 37.5000 18.4318181818181818 11
Production 6.5000 84.1346 13.5537671794871795 195
Production Control 8.6200 24.5192 16.7746125000000000 8
Purchasing 9.8600 30.0000 18.0202000000000000 14
Quality Assurance 10.5769 28.8462 15.4647333333333333 6
Research and Development 40.8654 50.4808 43.6731000000000000 4
Sales 23.0769 72.1154 29.9719444444444444 18
Shipping and Receiving 9.0000 19.2308 10.8718000000000000 6
Tool Design 8.6200 29.8462 23.5054000000000000 6
query R
SELECT MIN(TaxRate) FROM Sales.SalesTaxRate;
----
5.000000
query TRRRI
SELECT DISTINCT Name , MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept FROM HumanResources.EmployeePayHistory AS eph JOIN HumanResources.EmployeeDepartmentHistory AS edh ON eph.BusinessEntityID = edh.BusinessEntityID JOIN HumanResources.Department AS d ON d.DepartmentID = edh.DepartmentID WHERE edh.EndDate IS NULL ORDER BY Name;
----
Document Control 10.2500 17.7885 14.3884600000000000 5
Engineering 32.6923 63.4615 40.1442166666666667 6
Executive 39.0600 125.5000 68.3034750000000000 4
Facilities and Maintenance 9.2500 24.0385 13.0316000000000000 7
Finance 13.4615 43.2692 23.9350900000000000 10
Human Resources 13.9423 27.1394 18.0248166666666667 6
Information Services 27.4038 50.4808 34.1586300000000000 10
Marketing 13.4615 37.5000 18.4318181818181818 11
Production 6.5000 84.1346 13.5537671794871795 195
Production Control 8.6200 24.5192 16.7746125000000000 8
Purchasing 9.8600 30.0000 18.0202000000000000 14
Quality Assurance 10.5769 28.8462 15.4647333333333333 6
Research and Development 40.8654 50.4808 43.6731000000000000 4
Sales 23.0769 72.1154 29.9719444444444444 18
Shipping and Receiving 9.0000 19.2308 10.8718000000000000 6
Tool Design 8.6200 29.8462 23.5054000000000000 6
# https:docs.microsoft.com/en-us/sql/t-sql/functions/sum-transact-sql?view=sql-server-2017
query TRR
SELECT Color, SUM(ListPrice), SUM(StandardCost) FROM Production.Product WHERE Color IS NOT NULL AND ListPrice != 0.00 AND Name LIKE 'Mountain%' GROUP BY Color ORDER BY Color;
----
Black 27404.8400 15214.9616
Silver 26462.8400 14665.6792
White 19.0000 6.7926
query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD ,AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY TerritoryID,SalesYear, BusinessEntityID;
----
280 1 2011 1352577.1325 1462795.035400000000 2925590.0708
283 1 2011 1573012.9383 1462795.035400000000 2925590.0708
284 1 2012 1576562.1966 1500717.422466666667 4502152.2674
275 2 2011 3763178.1787 3763178.178700000000 3763178.1787
277 3 2011 3189418.3662 3189418.366200000000 3189418.3662
276 4 2011 4251368.5497 3354952.083300000000 6709904.1666
281 4 2011 2458535.6169 3354952.083300000000 6709904.1666
274 NULL 2010 559697.5639 559697.563900000000 559697.5639
287 NULL 2012 519905.9320 539801.747950000000 1079603.4959
285 NULL 2013 172524.4512 417375.982366666667 1252127.9471
query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD ,AVG(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY SalesYear, TerritoryID, BusinessEntityID;
----
274 NULL 2010 559697.5639 559697.563900000000 559697.5639
280 1 2011 1352577.1325 2449684.049457142857 17147788.3462
283 1 2011 1573012.9383 2449684.049457142857 17147788.3462
275 2 2011 3763178.1787 2449684.049457142857 17147788.3462
277 3 2011 3189418.3662 2449684.049457142857 17147788.3462
276 4 2011 4251368.5497 2449684.049457142857 17147788.3462
281 4 2011 2458535.6169 2449684.049457142857 17147788.3462
284 1 2012 1576562.1966 2138250.719422222222 19244256.4748
287 NULL 2012 519905.9320 2138250.719422222222 19244256.4748
285 NULL 2013 172524.4512 1941678.092600000000 19416780.9260
# https:docs.microsoft.com/en-us/sql/t-sql/functions/var-transact-sql?view=sql-server-2017
# TODO not supported
# SELECT VAR(Bonus) FROM Sales.SalesPerson;
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/cume-dist-transact-sql?view=sql-server-2017
query TTRRR
SELECT Department, LastName, Rate, CUME_DIST () OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist, PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate ) AS PctRank FROM HumanResources.vEmployeeDepartmentHistory AS edh INNER JOIN HumanResources.EmployeePayHistory AS e ON e.BusinessEntityID = edh.BusinessEntityID WHERE Department IN (N'Information Services',N'Document Control') ORDER BY Department, Rate DESC, LastName;
----
Document Control Arifin 17.7885 1 1
Document Control Kharatishvili 16.8269 0.8 0.5
Document Control Norred 16.8269 0.8 0.5
Document Control Berge 10.2500 0.4 0
Document Control Chai 10.2500 0.4 0
Information Services Trenary 50.4808 1 1
Information Services Conroy 39.6635 0.9 0.8888888888888888
Information Services Ajenstat 38.4615 0.8 0.6666666666666666
Information Services Wilson 38.4615 0.8 0.6666666666666666
Information Services Connelly 32.4519 0.6 0.4444444444444444
Information Services Sharma 32.4519 0.6 0.4444444444444444
Information Services Bacon 27.4038 0.4 0
Information Services Berg 27.4038 0.4 0
Information Services Bueno 27.4038 0.4 0
Information Services Meyyappan 27.4038 0.4 0
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/first-value-transact-sql?view=sql-server-2017
query TRT
SELECT Name, ListPrice, FIRST_VALUE(Name) OVER (ORDER BY ListPrice ASC) AS LeastExpensive FROM Production.Product WHERE ProductSubcategoryID = 37 ORDER BY ListPrice, Name DESC;
----
Patch Kit/8 Patches 2.2900 Patch Kit/8 Patches
Road Tire Tube 3.9900 Patch Kit/8 Patches
Touring Tire Tube 4.9900 Patch Kit/8 Patches
Mountain Tire Tube 4.9900 Patch Kit/8 Patches
LL Road Tire 21.4900 Patch Kit/8 Patches
ML Road Tire 24.9900 Patch Kit/8 Patches
LL Mountain Tire 24.9900 Patch Kit/8 Patches
Touring Tire 28.9900 Patch Kit/8 Patches
ML Mountain Tire 29.9900 Patch Kit/8 Patches
HL Road Tire 32.6000 Patch Kit/8 Patches
HL Mountain Tire 35.0000 Patch Kit/8 Patches
query TTIT
SELECT JobTitle, LastName, VacationHours, FIRST_VALUE(LastName) OVER (PARTITION BY JobTitle ORDER BY VacationHours ASC ROWS UNBOUNDED PRECEDING ) AS FewestVacationHours FROM HumanResources.Employee AS e INNER JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ORDER BY JobTitle, LastName;
----
1160 values hashing to 2d7dea029628bcba179722012d0e5865
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/last-value-transact-sql?view=sql-server-2017
query TTRTT
SELECT Department, LastName, Rate, HireDate, LAST_VALUE(HireDate) OVER (PARTITION BY Department ORDER BY Rate, LastName) AS LastValue FROM HumanResources.vEmployeeDepartmentHistory AS edh INNER JOIN HumanResources.EmployeePayHistory AS eph ON eph.BusinessEntityID = edh.BusinessEntityID INNER JOIN HumanResources.Employee AS e ON e.BusinessEntityID = edh.BusinessEntityID WHERE Department IN (N'Information Services',N'Document Control') ORDER BY 1, 3, 2, 4, 5;
----
Document Control Berge 10.2500 2009-02-09 2009-02-09
Document Control Chai 10.2500 2009-01-22 2009-01-22
Document Control Kharatishvili 16.8269 2008-12-16 2008-12-16
Document Control Norred 16.8269 2009-03-06 2009-03-06
Document Control Arifin 17.7885 2009-01-04 2009-01-04
Information Services Bacon 27.4038 2009-01-11 2009-01-11
Information Services Berg 27.4038 2009-02-16 2009-02-16
Information Services Bueno 27.4038 2008-12-23 2008-12-23
Information Services Meyyappan 27.4038 2009-02-03 2009-02-03
Information Services Connelly 32.4519 2009-02-23 2009-02-23
Information Services Sharma 32.4519 2008-12-04 2008-12-04
Information Services Ajenstat 38.4615 2009-01-17 2009-01-17
Information Services Wilson 38.4615 2009-01-22 2009-01-22
Information Services Conroy 39.6635 2009-02-04 2009-02-04
Information Services Trenary 50.4808 2008-12-11 2008-12-11
query IIIRRR
SELECT BusinessEntityID, DATEPART('QUARTER', QuotaDate) AS Quarter, YEAR(QuotaDate) AS SalesYear, SalesQuota AS QuotaThisQuarter, SalesQuota - FIRST_VALUE(SalesQuota) OVER (PARTITION BY BusinessEntityID, YEAR(QuotaDate) ORDER BY DATEPART('QUARTER',QuotaDate) ) AS DifferenceFromFirstQuarter, SalesQuota - LAST_VALUE(SalesQuota) OVER (PARTITION BY BusinessEntityID, YEAR(QuotaDate) ORDER BY DATEPART('QUARTER', QuotaDate) RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS DifferenceFromLastQuarter FROM Sales.SalesPersonQuotaHistory WHERE YEAR(QuotaDate) > 2005 AND BusinessEntityID BETWEEN 274 AND 275 ORDER BY BusinessEntityID, SalesYear, Quarter;
----
274 2 2011 28000.0000 0.0000 -63000.0000
274 3 2011 7000.0000 -21000.0000 -84000.0000
274 4 2011 91000.0000 63000.0000 0.0000
274 1 2012 140000.0000 0.0000 33000.0000
274 2 2012 70000.0000 -70000.0000 -37000.0000
274 3 2012 154000.0000 14000.0000 47000.0000
274 4 2012 107000.0000 -33000.0000 0.0000
274 1 2013 58000.0000 0.0000 -26000.0000
274 2 2013 263000.0000 205000.0000 179000.0000
274 3 2013 116000.0000 58000.0000 32000.0000
274 4 2013 84000.0000 26000.0000 0.0000
274 1 2014 187000.0000 0.0000 0.0000
275 2 2011 367000.0000 0.0000 -135000.0000
275 3 2011 556000.0000 189000.0000 54000.0000
275 4 2011 502000.0000 135000.0000 0.0000
275 1 2012 550000.0000 0.0000 -179000.0000
275 2 2012 1429000.0000 879000.0000 700000.0000
275 3 2012 1324000.0000 774000.0000 595000.0000
275 4 2012 729000.0000 179000.0000 0.0000
275 1 2013 1194000.0000 0.0000 345000.0000
275 2 2013 1575000.0000 381000.0000 726000.0000
275 3 2013 1218000.0000 24000.0000 369000.0000
275 4 2013 849000.0000 -345000.0000 0.0000
275 1 2014 869000.0000 0.0000 0.0000
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql?view=sql-server-2017
query IIRR
SELECT BusinessEntityID, YEAR(QuotaDate) AS SalesYear, SalesQuota AS CurrentQuota, LAG(SalesQuota, 1,0) OVER (ORDER BY YEAR(QuotaDate)) AS PreviousQuota FROM Sales.SalesPersonQuotaHistory WHERE BusinessEntityID = 275 and YEAR(QuotaDate) IN ('2005','2006');
----
query TIRR
SELECT TerritoryName, BusinessEntityID, SalesYTD, LAG (SalesYTD, 1, 0) OVER (PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS PrevRepSales FROM Sales.vSalesPerson WHERE TerritoryName IN (N'Northwest', N'Canada') ORDER BY TerritoryName, SalesYTD DESC;
----
Canada 282 2604540.7172 0.0
Canada 278 1453719.4653 2604540.7172
Northwest 284 1576562.1966 0.0
Northwest 283 1573012.9383 1576562.1966
Northwest 280 1352577.1325 1573012.9383
statement ok
CREATE TABLE T (a int, b int, c int);
statement ok
INSERT INTO T VALUES (1, 1, -3), (2, 2, 4), (3, 1, NULL), (4, 3, 1), (5, 2, NULL), (6, 1, 5);
query III
SELECT b, c, LAG(2*c, b*(SELECT MIN(b) FROM T), -c/2.0) OVER (ORDER BY a) AS i FROM T;
----
1 -3 2
2 4 -2
1 NULL 8
3 1 -6
2 NULL NULL
1 5 NULL
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/lead-transact-sql?view=sql-server-2017
query IIRR
SELECT BusinessEntityID, YEAR(QuotaDate) AS SalesYear, SalesQuota AS CurrentQuota, LEAD(SalesQuota, 1,0) OVER (ORDER BY YEAR(QuotaDate)) AS NextQuota FROM Sales.SalesPersonQuotaHistory WHERE BusinessEntityID = 275 and YEAR(QuotaDate) IN ('2005','2006');
----
query TIRR
SELECT TerritoryName, BusinessEntityID, SalesYTD, LEAD (SalesYTD, 1, 0) OVER (PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS NextRepSales FROM Sales.vSalesPerson WHERE TerritoryName IN (N'Northwest', N'Canada') ORDER BY TerritoryName, BusinessEntityID DESC;
----
Canada 282 2604540.717200 1453719.465300
Canada 278 1453719.465300 0.000000
Northwest 284 1576562.196600 1573012.938300
Northwest 283 1573012.938300 1352577.132500
Northwest 280 1352577.132500 0.000000
query IIII
SELECT a, b, c, LEAD(2.0*c, b*(SELECT MIN(b) FROM T), -c/2.0) OVER (ORDER BY a, b, c) AS i FROM T ORDER BY a, b, c;
----
1 1 -3 8.0
2 2 4 2.0
3 1 NULL 2.0
4 3 1 -0.50000000000000000000
5 2 NULL NULL
6 1 5 -2.5000000000000000
statement ok
DROP TABLE T;
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/percent-rank-transact-sql?view=sql-server-2017
query TTRRR
SELECT Department, LastName, Rate, CUME_DIST () OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist, PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate ) AS PctRank FROM HumanResources.vEmployeeDepartmentHistory AS edh INNER JOIN HumanResources.EmployeePayHistory AS e ON e.BusinessEntityID = edh.BusinessEntityID WHERE Department IN (N'Information Services',N'Document Control') ORDER BY Department, Rate DESC, LastName;
----
Document Control Arifin 17.7885 1 1
Document Control Kharatishvili 16.8269 0.8 0.5
Document Control Norred 16.8269 0.8 0.5
Document Control Berge 10.2500 0.4 0
Document Control Chai 10.2500 0.4 0
Information Services Trenary 50.4808 1 1
Information Services Conroy 39.6635 0.9 0.8888888888888888
Information Services Ajenstat 38.4615 0.8 0.6666666666666666
Information Services Wilson 38.4615 0.8 0.6666666666666666
Information Services Connelly 32.4519 0.6 0.4444444444444444
Information Services Sharma 32.4519 0.6 0.4444444444444444
Information Services Bacon 27.4038 0.4 0
Information Services Berg 27.4038 0.4 0
Information Services Bueno 27.4038 0.4 0
Information Services Meyyappan 27.4038 0.4 0
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/dense-rank-transact-sql?view=sql-server-2017
query ITIII
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity ,DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS Rank FROM Production.ProductInventory AS i INNER JOIN Production.Product AS p ON i.ProductID = p.ProductID WHERE i.LocationID BETWEEN 3 AND 4 ORDER BY i.LocationID, Quantity DESC, p.Name;
----
495 Paint - Blue 3 49 1
494 Paint - Silver 3 49 1
493 Paint - Red 3 41 2
496 Paint - Yellow 3 30 3
492 Paint - Black 3 17 4
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
query IRI
SELECT BusinessEntityID, Rate, DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary FROM HumanResources.EmployeePayHistory order by Rate DESC, BusinessEntityID DESC LIMIT 10;
----
1 125.5000 1
25 84.1346 2
273 72.1154 3
2 63.4615 4
234 60.0962 5
263 50.4808 6
7 50.4808 6
234 48.5577 7
287 48.1010 8
285 48.1010 8
query TTIIIIRT
SELECT p.FirstName, p.LastName, ROW_NUMBER() OVER (ORDER BY a.PostalCode, p.FirstName) AS "Row Number" ,RANK() OVER (ORDER BY a.PostalCode) AS Rank ,DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank" ,NTILE(4) OVER (ORDER BY a.PostalCode, p.FirstName) AS Quartile ,s.SalesYTD ,a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ORDER BY a.PostalCode, p.FirstName;
----
Garrett Vargas 1 1 1 1 1453719.4653 98027
Jillian Carson 2 1 1 1 3189418.3662 98027
Linda Mitchell 3 1 1 1 4251368.5497 98027
Michael Blythe 4 1 1 1 3763178.1787 98027
Pamela Ansman-Wolfe 5 1 1 2 1352577.1325 98027
Tsvi Reiter 6 1 1 2 2315185.6110 98027
David Campbell 7 7 2 2 1573012.9383 98055
Jae Pak 8 7 2 2 4116871.2277 98055
José Saraiva 9 7 2 3 2604540.7172 98055
Lynn Tsoflias 10 7 2 3 1421810.9242 98055
Rachel Valdez 11 7 2 3 1827066.7118 98055
Ranjit Varkey Chudukatil 12 7 2 4 3121616.3202 98055
Shu Ito 13 7 2 4 2458535.6169 98055
Tete Mensa-Annan 14 7 2 4 1576562.1966 98055
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/ntile-transact-sql?view=sql-server-2017
query TTIRT
SELECT p.FirstName, p.LastName ,NTILE(4) OVER(ORDER BY SalesYTD DESC, p.FirstName) AS Quartile ,s.SalesYTD AS SalesYTD , a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ORDER BY SalesYTD, p.FirstName;
----
Pamela Ansman-Wolfe 4 1352577.1325 98027
Lynn Tsoflias 4 1421810.9242 98055
Garrett Vargas 4 1453719.4653 98027
David Campbell 3 1573012.9383 98055
Tete Mensa-Annan 3 1576562.1966 98055
Rachel Valdez 3 1827066.7118 98055
Tsvi Reiter 2 2315185.6110 98027
Shu Ito 2 2458535.6169 98055
José Saraiva 2 2604540.7172 98055
Ranjit Varkey Chudukatil 2 3121616.3202 98055
Jillian Carson 1 3189418.3662 98027
Michael Blythe 1 3763178.1787 98027
Jae Pak 1 4116871.2277 98055
Linda Mitchell 1 4251368.5497 98027
# FIXME: ntile bug?
query TTIRT
SELECT p.FirstName, p.LastName ,NTILE(4) OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC, p.FirstName) AS Quartile ,s.SalesYTD AS SalesYTD ,a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ORDER BY PostalCode, SalesYTD DESC, p.FirstName;
----
Linda Mitchell 1 4251368.5497 98027
Michael Blythe 1 3763178.1787 98027
Jillian Carson 2 3189418.3662 98027
Tsvi Reiter 2 2315185.6110 98027
Garrett Vargas 3 1453719.4653 98027
Pamela Ansman-Wolfe 4 1352577.1325 98027
Jae Pak 1 4116871.2277 98055
Ranjit Varkey Chudukatil 1 3121616.3202 98055
José Saraiva 2 2604540.7172 98055
Shu Ito 2 2458535.6169 98055
Rachel Valdez 3 1827066.7118 98055
Tete Mensa-Annan 3 1576562.1966 98055
David Campbell 4 1573012.9383 98055
Lynn Tsoflias 4 1421810.9242 98055
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql?view=sql-server-2017
query ITIII
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity ,RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS Rank FROM Production.ProductInventory AS i INNER JOIN Production.Product AS p ON i.ProductID = p.ProductID WHERE i.LocationID BETWEEN 3 AND 4 ORDER BY i.LocationID, i.Quantity DESC, i.ProductID;
----
494 Paint - Silver 3 49 1
495 Paint - Blue 3 49 1
493 Paint - Red 3 41 3
496 Paint - Yellow 3 30 4
492 Paint - Black 3 17 5
495 Paint - Blue 4 35 1
496 Paint - Yellow 4 25 2
493 Paint - Red 4 24 3
492 Paint - Black 4 14 4
494 Paint - Silver 4 12 5
query IRI
SELECT BusinessEntityID, Rate, RANK() OVER (ORDER BY Rate DESC) AS RankBySalary FROM HumanResources.EmployeePayHistory AS eph1 WHERE RateChangeDate = (SELECT MAX(RateChangeDate) FROM HumanResources.EmployeePayHistory AS eph2 WHERE eph1.BusinessEntityID = eph2.BusinessEntityID) ORDER BY BusinessEntityID LIMIT 10;
----
1 125.5000 1
2 63.4615 4
3 43.2692 11
4 29.8462 28
5 32.6923 22
6 32.6923 22
7 50.4808 6
8 40.8654 14
9 40.8654 14
10 42.4808 13
# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017
query ITTR
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row, FirstName, LastName, SalesYTD FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY 1;
----
1 Linda Mitchell 4251368.5497
2 Jae Pak 4116871.2277
3 Michael Blythe 3763178.1787
4 Jillian Carson 3189418.3662
5 Ranjit Varkey Chudukatil 3121616.3202
6 José Saraiva 2604540.7172
7 Shu Ito 2458535.6169
8 Tsvi Reiter 2315185.6110
9 Rachel Valdez 1827066.7118
10 Tete Mensa-Annan 1576562.1966
11 David Campbell 1573012.9383
12 Garrett Vargas 1453719.4653
13 Lynn Tsoflias 1421810.9242
14 Pamela Ansman-Wolfe 1352577.1325
query TTTRI
SELECT FirstName, LastName, TerritoryName, SalesYTD, ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS Row FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY TerritoryName, SalesYTD DESC;
----
Lynn Tsoflias Australia 1421810.9242 1
José Saraiva Canada 2604540.7172 1
Garrett Vargas Canada 1453719.4653 2
Jillian Carson Central 3189418.3662 1
Ranjit Varkey Chudukatil France 3121616.3202 1
Rachel Valdez Germany 1827066.7118 1
Michael Blythe Northeast 3763178.1787 1
Tete Mensa-Annan Northwest 1576562.1966 1
David Campbell Northwest 1573012.9383 2
Pamela Ansman-Wolfe Northwest 1352577.1325 3
Tsvi Reiter Southeast 2315185.6110 1
Linda Mitchell Southwest 4251368.5497 1
Shu Ito Southwest 2458535.6169 2
Jae Pak United Kingdom 4116871.2277 1