Saturday, 30 November 2013

Ranking Functions & Aggregate Functions & Analytic Functions

Ranking Functions & Aggregate Functions & Analytic Functions

  • Ranking window functions
  1. Row_Number()
  2. Rank()
  3. Dense_Rank()
  4. Ntile()
  • Aggregate window functions
    • MINMAXAVGSUM
    • COUNTCOUNT_BIG
    • CHECKSUM_AGG
    • STDEVSTDEVPVARVARP
  • Analytic window functions
    • LAGLEAD
    • FIRST_VALUELAST_VALUE
    • PERCENT_RANKPERCENTILE_CONTPERCENTILE_DISCCUME_DIST

Ranking Functions


use AdventureWorksDW

go
SELECT *,
  ROW_NUMBER() OVER(ORDER BY salesreasonreasontype DESC) AS RowNumber,
  RANK() OVER(ORDER BY salesreasonreasontype DESC) AS BasicRank,
  DENSE_RANK() OVER(ORDER BY salesreasonreasontype DESC) AS DenseRank,
  NTILE(3) OVER(ORDER BY salesreasonreasontype DESC) AS NTileRank
FROM
  DimSalesReason

 results returned by the SELECT statement.



Aggregate Functions


use AdventureWorksDW

go
SELECT
  title,departmentname,
  COUNT(baserate) OVER(PARTITION BY departmentname) AS CountryCount,
  SUM(baserate) OVER(PARTITION BY departmentname) AS TotalSales,
  AVG(baserate) OVER(PARTITION BY departmentname) AS AverageSales
FROM
  DimEmployee
ORDER BY
  title,departmentname DESC;
RESULT:




Analytic Functions



SELECT
  SalesGroup,
  Country,
  AnnualSales,
  FIRST_VALUE(AnnualSales) OVER(PARTITION BY SalesGroup
    ORDER BY AnnualSales DESC) AS HighestSales,
  LAST_VALUE(AnnualSales) OVER(PARTITION BY SalesGroup
    ORDER BY AnnualSales DESC) AS LowestSales
FROM
  RegionalSales;

OUTPUT:

SalesGroup
Country
AnnualSales
HighestSales
LowestSales
Europe
United Kingdom
32000
32000
32000
Europe
Germany
22000
32000
22000
Europe
France
19000
32000
19000
Europe
Italy
18000
32000
18000
Europe
Greece
16000
32000
16000
Europe
Spain
16000
32000
16000
North America
Canada
32000
32000
32000
North America
Mexico
28000
32000
28000
North America
United States
22000
32000
22000
Pacific
China
28000
28000
28000
Pacific
Japan
22000
28000
22000
Pacific
Singapore
21000
28000
21000
Pacific
Malaysia
19000
28000
19000
Pacific
Australia
18000
28000
18000
Pacific
New Zealand
18000
28000
18000
Pacific
Thailand
17000
28000
17000
 This value is derived from the operating system of the computer on which the instance of SQL Server is running.
SELECT GETDATE() as TODAY
Ans:
DATEPART():
It returns the part of the date like YEAR,MONTH,WEEK,DAY,QUARTER,DAYOFYEAR,WEEKDAY,HOUR,MINUTE
,SECOND and MILLISECOND



 DATEDIFF():
Returns the count of the specified datepart boundaries crossed between the specified startdate and enddate.
ex:
SELECT DATEDIFF(YEAR,HIREDATE,GETDATE())AS DIFFERENCE FROM EMP


SELECT DATENAME(DAY, '2007-06-01')as dayinmonth,DATENAME(DY, '2007-06-01')as dayinyear,DATENAME(WEEKDAY, '2007-06-01')as weekday;
ans:
DAY():
Returns an integer representing the day (day of the month) of the specified date.
Ex:
SELECT DAY(GETDATE())AS DAYOFMONTH

MONTH():
SELECT MONTH(GETDATE())AS MONTHOFYEAR

YEAR():
SELECT YEAR(GETDATE())AS YEAR

CONVERSIONS
note:conversions are collected from different websites
declare @date datetime

set @date='2012-03-16 '

SELECT convert(varchar, @date, 103)

 

EMP, DEPT Sample script

/****** Object:  Table [dbo].[DEPT]    Script Date: 19-05-2016 06:58:37 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET A...