Oracle Analytic SQL NCOUG 2008 By: Ron Warshawsky CTO DBA InfoPower, Inc.

Slides:



Advertisements
Similar presentations
Analytic Functions : An Oracle Developer’s Best Friend
Advertisements

WHERE Clause Chapter 2. Objectives Limit rows by using a WHERE clause Use the LIKE operator Effect of NULL values Use compound conditions Use the BETWEEN.
5.1Database System Concepts - 6 th Edition Chapter 5: Advanced SQL Advanced Aggregation Features OLAP.
Chapter 11 Group Functions
Introduction to Oracle9i: SQL1 SQL Group Functions.
©Silberschatz, Korth and Sudarshan22.1Database System Concepts 4 th Edition 1 Extended Aggregation SQL-92 aggregation quite limited  Many useful aggregates.
Copyright: Silberschatz, Korth and Sudarshan 1 OLAP Functions Order-Dependent Aggregates and Windows in SQL: SQL: same as SQL:1999.
Putting the Sting in Hive Page 1 Alan F.
02 | Advanced SELECT Statements Brian Alderman | MCT, CEO / Founder of MicroTechPoint Tobias Ternstrom | Microsoft SQL Server Program Manager.
Oracle 10g analytical SQL for Business Intelligence Reporting Simay Alpoge Next Information Systems, Inc. Next Information Systems, Inc.
A Linear Regression Algorithm Using Windowing Functions KEVIN MCCARTY.
Chapter 6 Group Functions. Chapter Objectives  Differentiate between single-row and multiple-row functions  Use the SUM and AVG functions for numeric.
Chapter 3 Single-Table Queries
ADVANCE T-SQL: WINDOW FUNCTIONS Rahman Wehelie 7/16/2013 ITC 226.
The Model Clause explained Tony Hasler, UKOUG Birmingham 2012 Tony Hasler, Anvil Computer Services Ltd.
About the Presentations The presentations cover the objectives found in the opening of each chapter. All chapter objectives are listed in the beginning.
1 Single Table Queries. 2 Objectives  SELECT, WHERE  AND / OR / NOT conditions  Computed columns  LIKE, IN, BETWEEN operators  ORDER BY, GROUP BY,
Oracle Analytic Functions for IR Analysis and Reporting Mingguang Xu and Denise Gardner Office of Institutional Research University of Georgia.
Mark Inman U.S. Navy (Naval Sea Logistics Center) Session #213 Analytic SQL for Beginners.
What’s New In Denali - TSQL David Ballantyne. Who am I Kent.Net/SqlServer.
T-SQL: Simple Changes That Go a Long Way DAVE ingeniousSQL.com linkedin.com/in/ingenioussql.
More Windowing Functions KEVIN MCCARTY. What are Windowing Functions Again? Introduced in SQL Server 2005 (SQL 2003 Standard) Used to provide operations.
AL-MAAREFA COLLEGE FOR SCIENCE AND TECHNOLOGY INFO 232: DATABASE SYSTEMS CHAPTER 7 (Part II) INTRODUCTION TO STRUCTURED QUERY LANGUAGE (SQL) Instructor.
SQL Aggregation Oracle and ANSI Standard SQL Lecture 9.
Module 4: Grouping and Summarizing Data. Overview Listing the TOP n Values Using Aggregate Functions GROUP BY Fundamentals Generating Aggregate Values.
05 | SET Operators, Windows Functions, and Grouping Brian Alderman | MCT, CEO / Founder of MicroTechPoint Tobias Ternstrom | Microsoft SQL Server Program.
A Guide to SQL, Eighth Edition Chapter Four Single-Table Queries.
Random Query Generator for Hive November 2015 Hive Contributor Meetup Szehon Ho.
Analyzing Your Data with Analytic Functions Carl Dudley University of Wolverhampton, UK UKOUG Council Oracle ACE Director
Background Lots of Demos(That’s it.)
©Silberschatz, Korth and Sudarshan5.1Database System Concepts - 6 th Edition Recursive Queries.
A Glance at the Window Functions. Window Functions Introduced in SQL 2005 Enhanced in SQL 2012 So-called because they operate on a defined portion of.
1 Ch. 11: Grouping Things Together  ANSI standard SQL Group functions: AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE  Others: 8i: GROUPING (used with CUBE.
DATABASES
DBI309: Using SQL Server 2012 Window Functions to Solve Common T-SQL Challenges Steven Wang MCITP – BI, Database Developer and DBA.
1 ORACLE I 3 – SQL 1 Salim Phone: YM: talim_bansal.
IFS180 Intro. to Data Management Chapter 10 - Unions.
Eugene Meidinger Intermediate Querying: Going Beyond Select
T-SQL Power! Windows That Open Doors Adam
Data Analysis with SQL Window Functions Adam McDonald IT Architect / Senior SQL Developer Smith Travel
Relational Database Design
Analytic Window Functions
02 | Advanced SELECT Statements
T-SQL: Simple Changes That Go a Long Way
T-SQL: Simple Changes That Go a Long Way
Database Systems Subqueries, Aggregation
Group Functions Lab 6.
Data Analysis with SQL Window Functions
Window function performance
Chapter 5: Advanced SQL Database System concepts,6th Ed.
Using Window Ranking, Offset, and Aggregate Functions
I WANT TO HOLD YOUR HAND 1ST TOP 100 SINGLE
WINDOW FUNCTIONS ARE YOUR FRIENDS Dejan
T-SQL Window Functions in Microsoft SQL Server Denali
WINDOW FUNCTIONS ARE YOUR FRIENDS Dejan
T-SQL Window Function Deep Dive part 1
Writing Better Queries with Window Functions
Oracle8i Analytical SQL Features
SQL – Entire Select.
Chapter 4 Summary Query.
T-SQL Window function deep dive part 2
Introduction to Window Functions
T-SQL gotchas and power-ups
Data Analysis with SQL Window Functions
Introduction to T-sql Window functionS
Section 4 - Sorting/Functions
OLAP Functions Order-Dependent Aggregates and Windows in SQL: SQL: same as SQL:1999.
MySQL SQL for MySQL (I) Salim Mail :
Intermediate Query Structure and Development
T-SQL: Simple Changes That Go a Long Way
Presentation transcript:

Oracle Analytic SQL NCOUG 2008 By: Ron Warshawsky CTO DBA InfoPower, Inc.

Oracle Analytic SQL Note: “standard” name is “Window” functions When? – Starting 8i Why? – Simple Solution of Complex Problems Why Exactly? – advanced ranking, aggregation, row comparison, statistics, “what if” scenarios Order of Evaluation in SQL: Prior to “ORDER BY” clause

Oracle Analytic SQL Syntax: Analytic-Function(,,...) OVER ( ) PARTITION BY – aggregates result set into groups ORDER BY – orders data within a partition WINDOWING – rows or ranges (logical offset)

Oracle Analytic SQL More Windowing: BETWEEN... AND UNBOUNDED PRECEDING – start of partition UNBOUNDED FOLLOWING – end of partition CURRENT ROW value_expr Examples: ROWS BETWEEN 1 PRECEDING and 1 FOLLOWING ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW RANGE BETWEEN INTERVAL '7' day PRECEDING AND CURRENT ROW

Oracle Analytic SQL Major Functions: STANDARD AGGREGATE FUNCTIONS ROW_NUMBER() LAG() LEAD() RANK() DENSE_RANK() PERCENT_RANK() NTILE() FIRST_VALUE() LAST_VALUE() FIRST() LAST() STATISTICAL FUNCTIONS

Oracle Analytic SQL Practical Examples

Oracle Analytic SQL Selecting the Top n Records select sql_id, BUFFER_GETS_DELTA from ( select sql_id, BUFFER_GETS_DELTA, dense_rank() over (order by BUFFER_GETS_DELTA desc) dr from DBA_HIST_SQLSTAT ) x where dr <= 5 ;

Oracle Analytic SQL Calculate 3 period Moving Average select snap_id,sql_id,BUFFER_GETS_DELTA,avg(BUFFER_GETS_DELTA) over (order by snap_id rows between 1 preceding and 1 following ) MA_3snap_BG from DBA_HIST_SQLSTAT where sql_id = '0h6b2sajwb74n' ;

Oracle Analytic SQL Calculate 3 Day Moving Average select BEGIN_INTERVAL_TIME,sql_id,BUFFER_GETS_DELTA,avg(BUFFER_GETS_DELTA) over ( order by BEGIN_INTERVAL_TIME RANGE between interval '1' day preceding and interval '1' day following ) MA_3day_BG from DBA_HIST_SQLSTAT a,dba_hist_snapshot b where a.INSTANCE_NUMBER = b.INSTANCE_NUMBER and a.SNAP_ID = b.SNAP_ID and sql_id = '0h6b2sajwb74n' ;

Oracle Analytic SQL Sort Set by Most Frequently Occurring Items select sql_id, CNT, dense_rank() over (order by cnt desc) as rnk from ( select sql_id,count(*) as cnt from DBA_HIST_SQLSTAT group by sql_id ) x

Oracle Analytic SQL Identify Percentage of Total select distinct sql_id, (sql_bg/total)*100 as pct from ( select sql_id, sum(BUFFER_GETS_DELTA) over () total, sum(BUFFER_GETS_DELTA) over (partition by sql_id) sql_bg from DBA_HIST_SQLSTAT ) x order by 2 ;

Oracle Analytic SQL Reduce Skewing (ignore highest and lowest value within a set) select sql_id, avg(BUFFER_GETS_DELTA ) avg_bg from ( select sql_id, BUFFER_GETS_DELTA, min(BUFFER_GETS_DELTA) over (partition by sql_id) min_bg, max(BUFFER_GETS_DELTA) over (partition by sql_id) max_bg from DBA_HIST_SQLSTAT ) x where BUFFER_GETS_DELTA not in (min_bg, max_bg) group by sql_id ;

Oracle Analytic SQL Convert Rows into Columns select max(case when object_type='TABLE‘ then object_name else null end) as TAB_NAME, max(case when object_type='INDEX‘ then object_name else null end) as IDX_NAME from ( select object_type,object_name,row_number() over (partition by object_type order by object_name) rn from dba_objects where object_type in ('TABLE', 'INDEX' ) ) x group by rn order by 1 ;

Oracle Analytic SQL Create fix size “buckets” of data select segment_name ceil(row_number() over (order by segment_name)/50) grp, from DBA_SEGMENTS ;

Oracle Analytic SQL Create pre-defined number of data “buckets” select ntile(10) over (order by segment_name) grp, segment_name from DBA_SEGMENTS ;

Oracle Analytic SQL Mix Aggregates from multiple groups select sql_id, module, sum(BUFFER_GETS_DELTA ) over(partition by module) module_cnt, PARSING_SCHEMA_NAME, sum(BUFFER_GETS_DELTA ) over(partition by PARSING_SCHEMA_NAME) PARSING_SCHEMA_NAME_cnt, sum(BUFFER_GETS_DELTA ) over() total from DBA_HIST_SQLSTAT ;

Oracle Analytic SQL Aggregating across moving historical ranges select distinct x.* from ( select trunc(BEGIN_INTERVAL_TIME ) SNAP_Date,sum(BUFFER_GETS_DELTA) over (partition by trunc(BEGIN_INTERVAL_TIME ) ) snap_bg,sum(BUFFER_GETS_DELTA ) over(order by trunc(BEGIN_INTERVAL_TIME ) range between 14 preceding and current row) prior_2week_bg from DBA_HIST_SQLSTAT a,dba_hist_snapshot b where a.INSTANCE_NUMBER = b.INSTANCE_NUMBER and a.SNAP_ID = b.SNAP_ID ) x ;

Oracle Analytic SQL Identify Consecutive Ranges of Time select a.sql_id, b.BEGIN_INTERVAL_TIME snap_time, lead(b.BEGIN_INTERVAL_TIME) over (order by a.snap_id) next_snap_time from DBA_HIST_SQLSTAT a,dba_hist_snapshot b where a.INSTANCE_NUMBER = b.INSTANCE_NUMBER and a.SNAP_ID = b.SNAP_ID and sql_id = '83taa7kaw59c1'

Oracle Analytic SQL Access Future and Historical rows select snap_id,BUFFER_GETS_DELTA,nvl(lead(BUFFER_GETS_DELTA) over (order by snap_id, BUFFER_GETS_DELTA ), null ) forward,nvl(lag (BUFFER_GETS_DELTA) over (order by snap_id, BUFFER_GETS_DELTA ), null ) backward from ( select snap_id,sum(BUFFER_GETS_DELTA ) BUFFER_GETS_DELTA from DBA_HIST_SQLSTAT group by snap_id ) x order by 1 ;

Oracle Analytic SQL Select every N-th row select SNAP_ID from ( select snap_id,row_number( ) over (order by snap_id) rn from dba_hist_snapshot ) x where mod(rn,5) = 1 ;

Oracle Analytic SQL Remove Duplicate without use of Distinct select sql_id from ( select sql_id, row_number( ) over (partition by sql_id order by sql_id) rn from DBA_HIST_SQLSTAT ) x where rn = 1 ;

Oracle Analytic SQL Q&A