Functions make query results easier to understand and manipulate data values. There are two categories of functions: single row/scalar functions that return one value per row, and group/aggregate functions that operate on sets of values to return a single result. The GROUP BY clause groups rows based on columns and is used with aggregate functions to return summary results for each group.
Are you an Oracle developer or a DBA?
Do you know the difference between aggregate and analytic functions?
Without complex sub-queries or self-joins, do you know how to:
Calculate running/cumulative totals and moving/centered averages?
List products with revenues above or below their peers or product groups?
Compute the ratio of one category’s sales to the total sales?
Select the Top-N or Top N % of the customers/products?
Classify advertisers into quartiles/n-tiles based on the revenue potential?
Compare period-over-period (year-over-year, month-over-month) growth and rank advancement?
Convert rows into columns (pivot), columns into rows (unpivot) or aggregate strings?
Perform what-if analysis and hypothetical ranking?
Analytic functions are more performant because tables need to be scanned only once. They make you more productive because there is no need to write procedural code. No wonder Tom Kyte, a well-respected Oracle guru, says analytic functions are the best thing to happen after the sliced bread.
In the first half, I will cover the basics of the various analytic functions:
Ranking: RANK, DENSE_RANK, ROW_NUMBER, NTILE, CUME_DIST, PERCENTILE_RANK
Windowing: SUM, AVG, MAX, MIN, FIRST_VALUE, LAST_VALUE
Reporting: RATIO_TO_REPORT
Others: FIRST/LAST, LEAD/LAG, hypothetical ranking,
In the second half, I will show how powerful these functions are with a few examples.
If there is time, I will cover enhanced aggregation (ROLLUP, CUBE, GROUPING SET extensions to GROUP BY clause)
This class would be useful for both developers and DBAs alike, especially for those working in Analytic, Business Intelligence, and Datawarehouse environments.
Are you already an expert in analytic functions? Then come and help me refine the content.
For more info, read
http://download.oracle.com/docs/cd/E11882_01/server.112/e16579/analysis.htm
http://download.oracle.com/docs/cd/E11882_01/server.112/e16579/aggreg.htm
rollup, cross-tabulation across different dimensions using ROLLUP, CUBE and GROUPING SETS extension to GROUP BY clause
, most active time-periods (i.e. days when the most number of tickets are open in BZ, hours with the most take-off and landings, months with the highest sales, 5-minute periods with the maximum number of calls made, etc)
data densification?
their rank last year, this year, rank growth, running/cumulative total (Year-To-Date/Month-To-Date summation), moving averages, Year-Over-Year comparison, sales projection, average/min/max time between one sale and the next sale, products with above and below average sales.
overall average, sum, departmental average, sum, ranking, job wise ranking in one SQL.
Are you an Oracle developer or a DBA?
Do you know the difference between aggregate and analytic functions?
Without complex sub-queries or self-joins, do you know how to:
Calculate running/cumulative totals and moving/centered averages?
List products with revenues above or below their peers or product groups?
Compute the ratio of one category’s sales to the total sales?
Select the Top-N or Top N % of the customers/products?
Classify advertisers into quartiles/n-tiles based on the revenue potential?
Compare period-over-period (year-over-year, month-over-month) growth and rank advancement?
Convert rows into columns (pivot), columns into rows (unpivot) or aggregate strings?
Perform what-if analysis and hypothetical ranking?
Analytic functions are more performant because tables need to be scanned only once. They make you more productive because there is no need to write procedural code. No wonder Tom Kyte, a well-respected Oracle guru, says analytic functions are the best thing to happen after the sliced bread.
In the first half, I will cover the basics of the various analytic functions:
Ranking: RANK, DENSE_RANK, ROW_NUMBER, NTILE, CUME_DIST, PERCENTILE_RANK
Windowing: SUM, AVG, MAX, MIN, FIRST_VALUE, LAST_VALUE
Reporting: RATIO_TO_REPORT
Others: FIRST/LAST, LEAD/LAG, hypothetical ranking,
In the second half, I will show how powerful these functions are with a few examples.
If there is time, I will cover enhanced aggregation (ROLLUP, CUBE, GROUPING SET extensions to GROUP BY clause)
This class would be useful for both developers and DBAs alike, especially for those working in Analytic, Business Intelligence, and Datawarehouse environments.
Are you already an expert in analytic functions? Then come and help me refine the content.
For more info, read
http://download.oracle.com/docs/cd/E11882_01/server.112/e16579/analysis.htm
http://download.oracle.com/docs/cd/E11882_01/server.112/e16579/aggreg.htm
rollup, cross-tabulation across different dimensions using ROLLUP, CUBE and GROUPING SETS extension to GROUP BY clause
, most active time-periods (i.e. days when the most number of tickets are open in BZ, hours with the most take-off and landings, months with the highest sales, 5-minute periods with the maximum number of calls made, etc)
data densification?
their rank last year, this year, rank growth, running/cumulative total (Year-To-Date/Month-To-Date summation), moving averages, Year-Over-Year comparison, sales projection, average/min/max time between one sale and the next sale, products with above and below average sales.
overall average, sum, departmental average, sum, ranking, job wise ranking in one SQL.
Oracle Analytical Function Include First Value, Last Value, Lead, Lag, Nth Value with Unbounded and Difference between Rank and Dense Rank . Contain Rollup, Cube and Grouping and Different type of Window Function and Analytical Window frame
Oracle Advanced SQL and Analytic FunctionsZohar Elkayam
Even though DBAs and developers are writing SQL queries every day, it seems that advanced SQL techniques such as multidimension aggregation and analytic functions still remain relatively unknown. In this session, we will explore some of the common real-world usages for analytic function and understand how to take advantage of this great and useful tool. We will deep dive into ranking based on values and groups, understand aggregation of multiple dimensions without a group by, see how to do inter-row calculations, and much more.
This is the presentation slides which was presented in Kscope 17 on June 28, 2017.
Introduction Oracle Database 11g Release 2 for developersLucas Jellema
"This presentations provides an overview of the most striking new functionality in Oracle Database 11g Release 2, as seen through the eyes of (database) developers. The presentation introduces new analytical functionality, the successor to the connect by clause for hierarchical queries, parallel statement execution, new packages and especially: Edition Based Redefinition. This presentation was performed (with live demos) during the AMIS Query on 29th September 2009.
Similar to Introduction to Oracle Functions--(SQL)--Abhishek Sharma (20)
Unit 8 - Information and Communication Technology (Paper I).pdfThiyagu K
This slides describes the basic concepts of ICT, basics of Email, Emerging Technology and Digital Initiatives in Education. This presentations aligns with the UGC Paper I syllabus.
Acetabularia Information For Class 9 .docxvaibhavrinwa19
Acetabularia acetabulum is a single-celled green alga that in its vegetative state is morphologically differentiated into a basal rhizoid and an axially elongated stalk, which bears whorls of branching hairs. The single diploid nucleus resides in the rhizoid.
Honest Reviews of Tim Han LMA Course Program.pptxtimhan337
Personal development courses are widely available today, with each one promising life-changing outcomes. Tim Han’s Life Mastery Achievers (LMA) Course has drawn a lot of interest. In addition to offering my frank assessment of Success Insider’s LMA Course, this piece examines the course’s effects via a variety of Tim Han LMA course reviews and Success Insider comments.
How to Make a Field invisible in Odoo 17Celine George
It is possible to hide or invisible some fields in odoo. Commonly using “invisible” attribute in the field definition to invisible the fields. This slide will show how to make a field invisible in odoo 17.
Read| The latest issue of The Challenger is here! We are thrilled to announce that our school paper has qualified for the NATIONAL SCHOOLS PRESS CONFERENCE (NSPC) 2024. Thank you for your unwavering support and trust. Dive into the stories that made us stand out!
Model Attribute Check Company Auto PropertyCeline George
In Odoo, the multi-company feature allows you to manage multiple companies within a single Odoo database instance. Each company can have its own configurations while still sharing common resources such as products, customers, and suppliers.
Operation “Blue Star” is the only event in the history of Independent India where the state went into war with its own people. Even after about 40 years it is not clear if it was culmination of states anger over people of the region, a political game of power or start of dictatorial chapter in the democratic setup.
The people of Punjab felt alienated from main stream due to denial of their just demands during a long democratic struggle since independence. As it happen all over the word, it led to militant struggle with great loss of lives of military, police and civilian personnel. Killing of Indira Gandhi and massacre of innocent Sikhs in Delhi and other India cities was also associated with this movement.
Macroeconomics- Movie Location
This will be used as part of your Personal Professional Portfolio once graded.
Objective:
Prepare a presentation or a paper using research, basic comparative analysis, data organization and application of economic information. You will make an informed assessment of an economic climate outside of the United States to accomplish an entertainment industry objective.
2024.06.01 Introducing a competency framework for languag learning materials ...Sandy Millin
http://sandymillin.wordpress.com/iateflwebinar2024
Published classroom materials form the basis of syllabuses, drive teacher professional development, and have a potentially huge influence on learners, teachers and education systems. All teachers also create their own materials, whether a few sentences on a blackboard, a highly-structured fully-realised online course, or anything in between. Despite this, the knowledge and skills needed to create effective language learning materials are rarely part of teacher training, and are mostly learnt by trial and error.
Knowledge and skills frameworks, generally called competency frameworks, for ELT teachers, trainers and managers have existed for a few years now. However, until I created one for my MA dissertation, there wasn’t one drawing together what we need to know and do to be able to effectively produce language learning materials.
This webinar will introduce you to my framework, highlighting the key competencies I identified from my research. It will also show how anybody involved in language teaching (any language, not just English!), teacher training, managing schools or developing language learning materials can benefit from using the framework.
2. Introduction to Oracle
Functions
Functions make the result of the query
easier and are used to manipulate the data
values. Functions can accept any number of
constant values or variables. These
variables or constant are called as
arguments. SQL functions can perform
different types of operations such as
modify individual data items, convert
column data types, format dates and
numbers etc.
3. Categories of Functions
Oracle functions are categorized into two categories:
• Single Row/Scalar Functions
• Group/Aggregate Functions
Functions, which operate on single rows and return one
value per row, are called as Scalar functions or Single
Row Functions.
On the other hand functions, which operate on set of
values to give one result, are called as Group Functions
or Aggregate Functions.
4. Single-Row Functions (Scalar functions)
These functions act on each row of the table and
return a single value for each row selected. These
functions may accept one or more arguments and can
return a value of different data type than that it
has accepted.
5. Classification of Single Row Functions
Single Row Functions can be classified into the following
categories:
(i) Character
(ii) Number
(iii) Date
(iv) Conversion
(v) General
8. • length(x)
It returns the length of the string x.
Example:
SQL> Select LENGTH ('Ipso Facto') ergo FROM dual;
9. • ltrim(string[,char(s)])
It removes all the blank spaces from the left side of the
string if no char is specified. If we give a char, then it
removes the leading occurrences of that character from the
string.
10.
11.
12.
13.
14.
15. • Translate(char,find,new)
This function is used to find a char and replace it with new
character. All occurrences of find are replaced by the
character in new.
16.
17.
18.
19. • floor(x)
Where x is a number. This function returns the largest integer that is less than or equal to n. FLOOR round
down to a whole number.
20. • round(x[,y])
It rounds off x to the decimal precision of y. If y is negative, rounds to the precision of y places to the left of the
decimal point.
21. • sqrt(x)
This function returns the square root of the given number x. If the given number x is negative or NULL then the result is
NULL.
Example:
SQL>select sqrt(36) as square_root from dual;
27. SQL> SELECT TO_CHAR(SYSDATE,'HH') HOUR,
TO_CHAR(SYSDATE,'MI') MIN,TO_CHAR(SYSDATE,'SS')
SEC FROM DUAL;
The output is:
HO MI SE
-- -- --
03 01 16
SQL> SELECT TO_DATE('15-MAR-1999','DD-MON-
YYYY')FROM DUAL;
SQL>SELECT TO_NUMBER('49583') FROM DUAL;
31. Aggregate Functions (Group
Functions)
These functions are used to produce summarized
results. They are applied on set of rows to give you
single value as a result. A group function allows you to
perform a data operation on several values in a column
of data as though the column was one collective group
of data. These functions are called group functions
also, because they are often used in a special clause of
select statements called a group by clause.
32. COUNT (x)
This function returns the number of rows or non-null values
for column x. When we use * in place of x, it returns the
total number of rows in the table.
Syntax:
count([distinct|all]column name)
Example:
1. Count the number of employees in the emp table.
SQL>Select count(empno) from emp;
The Output is:
COUNT(EMPNO)
------------
16
33. List the number of different names in the emp table.
SQL>Select count (distinct ename) from emp;
The output is:
COUNT(DISTINCTENAME)
--------------------
16
List the number of departments in the employee table .
SQL>Select count( distinct deptno) from emp;
The output is:
COUNT(DISTINCTDEPTNO)
---------------------
3
34. SUM(x)
This function returns the sum of values for the
column x. This function is applied on columns having numeric
datatype and it returns the numeric value.
syntax : sum([distinct|all]column name)
Example:
List the total salary paid to the employees in the emp table.
SQL>select sum(sal) from emp ;
The output is:
SUM(SAL)
---------
29025
35. AVG(x)
This function returns the average of values for
the column x. This function is applied on columns having
numeric datatype and it returns the numeric value. It ignores
the null values in the column x.
syntax : avg([distinct|all]column name)
Example:
List the average salary and the number of employees in the
emp table .
SQL>select avg(sal) ,count(sal) from emp ;
36. MIN(x)
This function returns the minimum of values for the column
x for all the rows .this function can be applied on any
datatype .
syntax : min([distinct|all]column name)
Example:
List the minimum salary in the emp table .
SQL>select min(sal) from emp ;
The output is:
MIN(SAL)
--------
800
37. MAX(x)
This function returns the maximum of values for
the column x for all the rows .this function can be applied on
any datatype.
syntax : max([distinct|all]column name)
Example:
List the maximum salary and commission in the emp table .
SQL>select max(sal) ,max(comm) from emp ;
38. Note : The avg() and sum() functions will always be applied
on numeric datatype while min() and max() functions can be
applied on any datatype.
Example
SQL>select avg(sal),sum(sal),min(ename),max(ename) from
emp ;
39. Exercise :
•list the names of the employees earning minimum salary .
•list the names of the employees earning second highest
salary .
•list the details of the employees who earn salary greater
than the average salary . also count their number .
•count the number of employees whose salary is equal to
the highest salary .
•list the number of employees ,their average salary
,minimum salary and maximum salary in the employee
table.
40. Grouping Data with GROUP
BY
GROUP BY clause is used to group or categorize the data. In other
words it divide rows in a table into smaller groups. We can then
use the group functions to return summary information for each
group.
If no GROUP BY clause is specified, then the default grouping is
the entire result set. When the query executes and the data is
fetched, it is grouped based on the GROUP BY clause and the
group function is applied.
41. Syntax:
SELECT column,group_function(column) FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Here, group_by_expression specifies columns whose values
determine the basis for grouping rows.
42. For example, If we have to find the total salary of each department
manually, first we group the records on the basis of department
number and then we apply the sum function on salary of each group
to obtain the required result. Similarly in SQL we apply the GROUP
BY clause on deptno and then calculate the total salary for each group
by Sum(sal) function as shown below:
SQL>SELECT deptno, Sum(sal) FROM emp GROUP BY
deptno;
The output is:
DEPTNO SUM(SAL)
10 2916.6667
20 2175
30 1566.6667
43.
44. Here is how this SELECT statement, containing a GROUP BY
clause, is evaluated:
• The SELECT clause specifies the columns to be retrieved i.e
Department number column in the EMP table, the sum of all the
salaries in the group you specified in the GROUP By clause
• The FROM clause specifies the tables that the database must
access i.e EMP table.
• The WHERE clause specifies the rows to be retrieved. Since
there is no WHRE clause, by default all rows are retrieved.
45. The GROUP BY clause specifies how the rows should be grouped.
Department number groups the rows, so the AVG function that is
being applied to the salary column will calculate the average salary
for each department.
• List the average salary of each job in the emp table.
SQL>SELECT JOB,AVG(SAL) FROM EMP GROUP BY JOB;
•
List the maximum salary for each dept.
SQL>SELECT DEPTNO,MAX(SAL) FROM EMP GROUP BY
DEPTNO;
46. Grouping by more than one
column
Sometimes there is a need to see results for groups within groups.
For example if we have to find the total salary being paid to each
job title, within each department. Then there is a need to having
grouping on department number and within each department
number grouping on the basis of job or in other words there is a
need for grouping within a group.
Thus, the EMP table is grouped first by department number, and
within that grouping, it is grouped by job title. For example, the two
clerks in department 20 are grouped together and a single result
(total salary) is produced for all clerks people within that group.
49. By above example it is clear that we can return summary results for
groups and subgroups by listing more than one GROUP BY column.
We can determine the default sort order of the results by the order of
the columns in the GROUP BY clause.
The SELECT clause specifies the column to be retrieved:
• Department number in the EMP table
• Job title in the EMP table
• The sum of all the salaries in the group that you specified in
the GROUP BY clause
• The FROM clause specifies the tables that the database must
access the EMP table
• The GROUP BY clause specifies how we must group the rows
First, department number groups the rows. Second, within the
department number groups, the rows are grouped by job title. So, the
SUM function is being applied to the salary column for all job titles
within each department number group.
50. Illegal Queries Using Group
Functions
Whenever you use a mixture of individual items (DEPTNO) and
group functions (COUNT) in the same select statement, you must
include a Group By clause that specifies the individual items (in
this case, DEPTNO). If the GROUP By clause is missing, then the
error message “not a single-group group function” appears and an
asterisk (*) points to the offending column. You can correct the
error by adding the GROUP BY clause.
51. For example, following is the illegal query:
SQL> SELECT deptno, COUNT(ename) FROM emp;
The Output will be:
Column missing in the Group By clause
Select deptno,count(ename)
*
ERROR at line 1:
ORA-00937: not a single-group group function In above select
statement individual items DEPTNO and group function COUNT
appears in the same SELECT statement without GROUP BY
clause which results error, it can be corrected by adding the
GROUP BY clause as shown below:
SQL> SELECT deptno,COUNT(ename) FROM emp Group By deptno;
52. DEPTNO COUNT(ENAME)
10 3
20 5
30 6
Note:
Any column or expression in the SELECT list that is not an
aggregate function must be in the GROUP By clause.
53. Restricting Group Results
As we use the WHERE clause to restrict the rows that we select,
we can use the HAVING clause to restrict groups.
For example: To find the maximum salary of each department,
but show only the departments that have a maximum salary of
more than Rs.2900, we need to do the following.
• Find the maximum salary for each department by grouping
by department number.
• Restrict the groups to those departments with a maximum
salary greater the Rs.2900.
55. Here we use the HAVING clause to specify which groups are to be
displayed. Therefore, we further restrict the groups on the basis of
aggregate information.
In the syntax:
HAVING clause restricts the groups of rows returned to those
groups for which the specified condition is TRUE
The Oracle Server performs the following steps when you use the
HAVING clause:
56. • Rows are grouped
• The group function is applied to the group.
• The groups that match the criteria in the HAVING clause are
displayed.
The HAVING clause can precede the GROUP By clause, but it is
recommended that you place the GROUP By clause first because it is
more logical. Groups are formed and group functions are calculated
before the HAVING clause is applied to the groups in the SELECT
list.
57. For example: To find the maximum salary of each department, but
show only the departments that have a maximum salary of more than
Rs.2900
SQL> SELECT deptno,max(sal) FROM emp
GROUP BY deptno Having max(sal)>2900;
The output is:
DEPTNO MAX(SAL)
10 5000
20 3000
58. Use of WHERE clause with GROUP BY clause
List the total salary, maximum and minimum salary and the
average salary of employees job wise, for department number 20
and display only those rows having average salary greater than
1000
SQL>SELECT job, SUM(sal), avg(sal), max(sal), min(sal) from
emp
WHERE deptno=20
GROUP by job
HAVING AVG(sal)>1000;
59. The output is:
JOB SUM(SAL) AVG(SAL) MAX(SAL) MIN(SAL)
ANALYST 6000 3000 3000 3000
MANAGER 2975 2975 2975 2975
60. SQL> SELECT job, SUM(sal) PAYROLL
FROM emp
WHERE job NOT LIKE 'SALE%'
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY SUM(sal);
The output is:
JOB PAYROLL
ANALYST 6000
MANAGER 8275
The above query displays the job title and total monthly salary for
each job title with a total payroll exceeding Rs.5000. The example
excludes salespeople and sorts the list by the total monthly salary.
61. Display total no of suppliers supplying red part
Display total qty supplied by by each supplier
Display total Qty supplied for each part excluding P3
Only display those where supplied qty is greater than100
Display info in descending order of Qty
Select Pno, Sum(QTY) from SP WHERE PNO<>’P3’
GROUP BY PNO HAVING SUM(QTY)>1000 ORDER BY
PNO;
62. Display total Qty supplied for each part excluding part having red
color, Only display those where supplied qty is greater than100
Select Pno, Sum(QTY) from SP WHERE PNO NOT IN(SELECT
PNO FROM P WHERE COLOR=‘RED’) GROUP BY PNO
HAVING SUM(QTY)>1000 ORDER BY PNO;