Top Banner
A Game of Hierarchies From GROUP BY to Recursive CTEs
40

A Game of Hierarchies - From GROUP BY to Recursive CTE

Jan 17, 2017

Download

Data & Analytics

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: A Game of Hierarchies - From GROUP BY to Recursive CTE

A Game of Hierarchies

From GROUP BY to Recursive CTEs

Page 4: A Game of Hierarchies - From GROUP BY to Recursive CTE

Welcome to SQL Saturday Denmark

Page 5: A Game of Hierarchies - From GROUP BY to Recursive CTE
Page 6: A Game of Hierarchies - From GROUP BY to Recursive CTE

Introduction

Markus Ehrenmüller-Jensen

Business Intelligence Architect

SQL Server 2005 - 2016

BI Developer

Database Developer

Database Admin

@MEhrenmueller

/markus-ehrenmueller

[email protected]

sqlederhose.wordpress.com

Page 7: A Game of Hierarchies - From GROUP BY to Recursive CTE

Every fool loves to hear that he’s important.

Tyrion Lannister (A Dance with Dragons)

Page 8: A Game of Hierarchies - From GROUP BY to Recursive CTE

Valar Morghulis

All men must die

Page 9: A Game of Hierarchies - From GROUP BY to Recursive CTE

Valar Dohaeris

All men must serve

Page 10: A Game of Hierarchies - From GROUP BY to Recursive CTE

Agenda

Aggregation, GROUP BY & OVER()

Several columns in one table

Several tables

Self-join in table

HierarchyID

Page 11: A Game of Hierarchies - From GROUP BY to Recursive CTE

Aggregations

Aggregate FunctionsCOUNT, SUM, MIN, MAX, AVG

GROUPING, GROUPING_ID

STDEV, STDEVP, VAR, VARP

COUNT_BIG, CHECKSUM_AGG

GROUP BYROLLUP

CUBE

GROUPING SET

OVER()PARTITION BY

ORDER BY

Page 12: A Game of Hierarchies - From GROUP BY to Recursive CTE

Demo-Query

Page 13: A Game of Hierarchies - From GROUP BY to Recursive CTE

Aggregations

Page 14: A Game of Hierarchies - From GROUP BY to Recursive CTE

Aggregations

SELECT

POIName,

RegionName,

ContinentName,

WorldName,

COUNT(*) asCountOfSomething

FROM

dbo.GoT_POI

GROUP BY

POIName,

RegionName,

ContinentName,

WorldName

ORDER BY

WorldName,

ContinentName,

RegionName,

POIName;

Page 15: A Game of Hierarchies - From GROUP BY to Recursive CTE

OVER()

Page 16: A Game of Hierarchies - From GROUP BY to Recursive CTE

OVER(PARTITION

BY WorldName)

OVER(PARTITION

BY RegionName)

OVER(PARTITION

BY POIName)

OVER(PARTITION

BY ContinentName)

Page 17: A Game of Hierarchies - From GROUP BY to Recursive CTE

GROUP BY ROLLUP 1/2

GROUP BY ROLLUP (

RegionName,

ContinentName,

WorldName

)

Region, Continent, World

Region, Continent

Region

()

Page 18: A Game of Hierarchies - From GROUP BY to Recursive CTE

GROUP BY ROLLUP 2/2

GROUP BY ROLLUP (

WorldName,

ContinentName,

RegionName

)

World, Continent, Region

World, Continent

World

()

Page 19: A Game of Hierarchies - From GROUP BY to Recursive CTE

GROUP BY CUBE 1/2

GROUP BY CUBE (

RegionName,

ContinentName,

WorldName

)

Region, Continent, World

Region, Continent

Region, World

Continent, World

Region

Continent

World

()

Page 20: A Game of Hierarchies - From GROUP BY to Recursive CTE

GROUP BY CUBE 2/2

GROUP BY CUBE (

WorldName,

ContinentName,

RegionName

)

Region, Continent, World

Region, Continent

Region, World

Continent, World

Region

Continent

World

()

Page 21: A Game of Hierarchies - From GROUP BY to Recursive CTE

GROUP BY GROUPING SETS

GROUP BY GROUPING SETS ((RegionName, ContinentName,WorldName),(RegionName, ContinentName),(RegionName, WorldName),(ContinentName, WorldName),(RegionName),(ContinentName),(WorldName),())

Region, Continent, World

Region, Continent

Region, World

Continent, World

Region

Continent

World

()

Page 22: A Game of Hierarchies - From GROUP BY to Recursive CTE

How to implement Hierarchies in SQL Server?

Several columns in one table

Several tables

Self-join in table

HierarchyID

Page 23: A Game of Hierarchies - From GROUP BY to Recursive CTE

Several columns in one table

Eg. CityName, RegionName, ContinentName

Denormalized

Advantage

No joins needed

Disadvantage

Redundancy

Rather limited in the amount of groups/levels

Page 24: A Game of Hierarchies - From GROUP BY to Recursive CTE

Several columns in one table

Page 25: A Game of Hierarchies - From GROUP BY to Recursive CTE

Several tables

Eg. City.Name, Region.Name, Continent.Name

Normalized

References a row in another table

Advantage

No redundancy

Disadvantage

Joins needed

Rather limited in the amount of groups/levels

Page 26: A Game of Hierarchies - From GROUP BY to Recursive CTE

Several tables

Page 27: A Game of Hierarchies - From GROUP BY to Recursive CTE

Querying several tables

Page 28: A Game of Hierarchies - From GROUP BY to Recursive CTE

Self-join in table

Eg. Family.ID, Family.FatherID

References different row in the very same table

Advantage

Unlimited in the amount of levels

No redundancy

Disadvantage

Joins needed

Complex queries (Loops, recursive CTE)

Page 29: A Game of Hierarchies - From GROUP BY to Recursive CTE

Self-join in table

Page 30: A Game of Hierarchies - From GROUP BY to Recursive CTE

Querying a self-join table: Basic

Page 31: A Game of Hierarchies - From GROUP BY to Recursive CTE

Family Affairs

Child & Father

All descendants & all ascendants

X generations only

Grandfather & grandson

Ancestor & youngest generation

Uncles & aunts

Full family tree

Page 32: A Game of Hierarchies - From GROUP BY to Recursive CTE

I never bet against my family.

Tyrion Lannister (A Game of Thrones)

Page 33: A Game of Hierarchies - From GROUP BY to Recursive CTE

Demo-Query

Page 34: A Game of Hierarchies - From GROUP BY to Recursive CTE

Querying a self-join table through

recursive CTE

Page 35: A Game of Hierarchies - From GROUP BY to Recursive CTE

HierarchyID

Available since SQL Server 2008

Codes position within a hierarchy

Offers methods to access hierarchy attributes

Does not guarantee uniqueness

No foreign key constraints between nodes

Page 36: A Game of Hierarchies - From GROUP BY to Recursive CTE

Wrap up

Aggregation, GROUP BY & OVER()

Several columns in one table

Several tables

Self-join in table

HierarchyID

Page 37: A Game of Hierarchies - From GROUP BY to Recursive CTE

What John Snow knows

nothing (Source: Ygritte)

Page 38: A Game of Hierarchies - From GROUP BY to Recursive CTE

Resources

BOL: Using GROUP BY with ROLLUP, CUBE, and GROUPING

SETS

https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx

Itzik Ben-Gan (2015), T-SQL Querying, Microsoft Press

https://www.microsoftpressstore.com/store/t-sql-querying-

9780735685048

Steve Stedman (2015), Advanced CTE

http://stevestedman.com/2015/06/24-hours-of-pass-advanced-cte-

presenation/

Page 39: A Game of Hierarchies - From GROUP BY to Recursive CTE

Questions?

Markus Ehrenmüller-Jensen

Business Intelligence Architect

SQL Server 2005 - 2016

BI Developer

Database Developer

Database Admin

@MEhrenmueller

/markus-ehrenmueller

[email protected]

sqlederhose.wordpress.com

Page 40: A Game of Hierarchies - From GROUP BY to Recursive CTE

Please review the event and sessions

EVENT SESSION

2016-09-

17 |Footer Goes Here69 |

http://speakerscore.com/ZGVX

INSERT QR CODE

FROM WORD

DOCUMENT and

CHANGE THE URL AS

WELL

http://speakerscore.com/LT64