Les 05

Embed Size (px)

Citation preview

  • 8/14/2019 Les 05

    1/26

    55

    Aggregating DataUsing Group Functions

    Aggregating DataUsing Group Functions

  • 8/14/2019 Les 05

    2/26

    5-2

    ObjectivesObjectives

    After completing this lesson, you shouldAfter completing this lesson, you shouldbe able to do the following:be able to do the following:

    Identify the available group functions Describe the use of group functions

    Group data using the GROUP BY clause

    Include or exclude grouped rows byusing the HAVING clause

    After completing this lesson, you shouldAfter completing this lesson, you shouldbe able to do the following:be able to do the following:

    Identify the available group functions

    Describe the use of group functions

    Group data using the GROUP BY clause

    Include or exclude grouped rows byusing the HAVING clause

  • 8/14/2019 Les 05

    3/26

    5-3

    What Are Group Functions?What Are Group Functions?Group functions operate on sets of rows to giveGroup functions operate on sets of rows to give

    one result per group.one result per group.

    Group functions operate on sets of rows to giveGroup functions operate on sets of rows to give

    one result per group.one result per group.EMPEMP

    maximummaximum

    salary insalary in

    the EMP tablethe EMP table

    DEPTNO SAL

    --------- ---------10 2450

    10 5000

    10 130020 800

    20 110020 3000

    20 3000

    20 2975

    30 160030 2850

    30 125030 950

    30 1500

    30 1250

    MAX(SAL)

    ---------

    5000

  • 8/14/2019 Les 05

    4/26

    5-4

    Types of Group FunctionsTypes of Group Functions

    AVG

    COUNT

    MAX MIN

    STDDEV

    SUM VARIANCE

    AVG

    COUNT

    MAX MIN

    STDDEV

    SUM VARIANCE

  • 8/14/2019 Les 05

    5/26

    5-5

    Using Group FunctionsUsing Group Functions

    SELECT [column,] group_function(column)

    FROM table

    [WHERE condition]

    [GROUP BY column][ORDER BY column];

  • 8/14/2019 Les 05

    6/26

    5-6

    Using AVG and SUM FunctionsUsing AVG and SUM Functions

    AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)

    -------- --------- --------- ---------

    1400 1600 1250 5600

    You can use AVG and SUM for numeric data.You can use AVG and SUM for numeric data.You can use AVG and SUM for numeric data.You can use AVG and SUM for numeric data.

    SQL> SELECT AVG(sal), MAX(sal),

    2 MIN(sal), SUM(sal)

    3 FROM emp

    4 WHERE job LIKE 'SALES%';

  • 8/14/2019 Les 05

    7/26

    5-7

    Using MIN and MAX FunctionsUsing MIN and MAX Functions

    You can use MIN and MAX for any datatype.You can use MIN and MAX for any datatype.You can use MIN and MAX for any datatype.You can use MIN and MAX for any datatype.

    SQL> SELECT MIN(hiredate), MAX(hiredate)

    2 FROM emp;

    MIN(HIRED MAX(HIRED

    --------- ---------

    17-DEC-80 12-JAN-83

  • 8/14/2019 Les 05

    8/26

    5-8

    Using the COUNT FunctionUsing the COUNT Function

    COUNT(*)

    ---------

    6

    SQL> SELECT COUNT(*)

    2 FROM emp

    3 WHERE deptno = 30;

    COUNT(*) returns the number of rows in aCOUNT(*) returns the number of rows in atable.table.COUNT(*) returns the number of rows in aCOUNT(*) returns the number of rows in atable.table.

  • 8/14/2019 Les 05

    9/26

    5-9

    Using the COUNT FunctionUsing the COUNT Function

    COUNT(COUNT(exprexpr) returns the number of) returns the number ofnonnull rows.nonnull rows.COUNT(COUNT(exprexpr) returns the number of) returns the number ofnonnull rows.nonnull rows.

    SQL> SELECT COUNT(comm)

    2 FROM emp

    3 WHERE deptno = 30;

    COUNT(COMM)

    -----------

    4

  • 8/14/2019 Les 05

    10/26

    5-10

    Group Functions and Null ValuesGroup Functions and Null Values

    Group functions ignore null values in theGroup functions ignore null values in thecolumn.column.Group functions ignore null values in theGroup functions ignore null values in thecolumn.column.

    SQL> SELECT AVG(comm)

    2 FROM emp;

    AVG(COMM)

    ---------

    550

  • 8/14/2019 Les 05

    11/26

    5-11

    Using the NVL Function

    with Group Functions

    Using the NVL Function

    with Group FunctionsThe NVL function forces group functionsThe NVL function forces group functionsto include null values.to include null values.The NVL function forces group functionsThe NVL function forces group functionsto include null values.to include null values.

    SQL> SELECT AVG(NVL(comm,0))

    2 FROM emp;

    AVG(NVL(COMM,0))

    ----------------

    157.14286

  • 8/14/2019 Les 05

    12/26

    5-12

    Creating Groups of DataCreating Groups of Data

    EMPEMP

    averageaveragesalarysalary

    in EMPin EMP

    tabletable

    for eachfor each

    departmentdepartment

    2916.66672916.6667

    21752175

    1566.66671566.6667

    DEPTNO SAL

    --------- ---------10 2450

    10 500010 1300

    20 80020 1100

    20 3000

    20 300020 2975

    30 1600

    30 285030 125030 950

    30 150030 1250

    DEPTNO AVG(SAL)

    ------- ---------

    10 2916.6667

    20 2175

    30 1566.6667

  • 8/14/2019 Les 05

    13/26

    5-13

    Creating Groups of Data:

    GROUP BY Clause

    Creating Groups of Data:

    GROUP BY Clause

    SELECT column, group_function(column)

    FROM table

    [WHERE condition][GROUP BY group_by_expression]

    [ORDER BY column];

    Divide rows in a table into smaller groupsDivide rows in a table into smaller groupsby using the GROUP BY clause.by using the GROUP BY clause.Divide rows in a table into smaller groupsDivide rows in a table into smaller groupsby using the GROUP BY clause.by using the GROUP BY clause.

  • 8/14/2019 Les 05

    14/26

    5-14

    Using the GROUP BY ClauseUsing the GROUP BY Clause

    All columns in the SELECT list that are notAll columns in the SELECT list that are notin group functions must be in the GROUPin group functions must be in the GROUPBY clause.BY clause.

    All columns in the SELECT list that are notAll columns in the SELECT list that are notin group functions must be in the GROUPin group functions must be in the GROUPBY clause.BY clause.

    SQL> SELECT deptno, AVG(sal)2 FROM emp

    3 GROUP BY deptno;

    DEPTNO AVG(SAL)

    --------- ---------

    10 2916.6667

    20 2175

    30 1566.6667

  • 8/14/2019 Les 05

    15/26

    5-15

    Using the GROUP BY ClauseUsing the GROUP BY Clause

    The GROUP BY column does not have toThe GROUP BY column does not have tobe in the SELECT list.be in the SELECT list.The GROUP BY column does not have toThe GROUP BY column does not have tobe in the SELECT list.be in the SELECT list.

    SQL> SELECT AVG(sal)

    2 FROM emp

    3 GROUP BY deptno;

    AVG(SAL)

    ---------

    2916.66672175

    1566.6667

  • 8/14/2019 Les 05

    16/26

    5-16

    Grouping by More

    Than One Column

    Grouping by More

    Than One ColumnEMPEMP

    sum salaries insum salaries in

    the EMP tablethe EMP table

    for each job,for each job,

    grouped bygrouped by

    departmentdepartment

    DEPTNO JOB SAL

    --------- --------- ---------

    10 MANAGER 2450

    10 PRESIDENT 5000

    10 CLERK 1300

    20 CLERK 800

    20 CLERK 1100

    20 ANALYST 3000

    20 ANALYST 3000

    20 MANAGER 2975

    30 SALESMAN 1600

    30 MANAGER 2850

    30 SALESMAN 1250

    30 CLERK 950

    30 SALESMAN 1500

    30 SALESMAN 1250

    JOB SUM(SAL)

    --------- ---------

    CLERK 1300 MANAGER 24

    PRESIDENT 5000

    ANALYST 60

    CLERK 1900

    MANAGER 29

    CLERK 950 MANAGER 28

    SALESMAN 5600

    DEPTNO

    --------

    1010

    10

    20

    20

    20

    3030

    30

  • 8/14/2019 Les 05

    17/26

    5-17

    Using the GROUP BY Clause

    on Multiple Columns

    Using the GROUP BY Clause

    on Multiple ColumnsSQL> SELECT deptno, job, sum(sal)

    2 FROM emp

    3 GROUP BY deptno, job;

    DEPTNO JOB SUM(SAL)

    --------- --------- ---------

    10 CLERK 1300

    10 MANAGER 2450

    10 PRESIDENT 500020 ANALYST 6000

    20 CLERK 1900

    ...

    9 rows selected.

  • 8/14/2019 Les 05

    18/26

    5-18

    Illegal Queries

    Using Group Functions

    Illegal Queries

    Using Group FunctionsAny column or expression in the SELECTAny column or expression in the SELECTlist that is not an aggregate function mustlist that is not an aggregate function mustbe in the GROUP BY clause.be in the GROUP BY clause.

    Any column or expression in the SELECTAny column or expression in the SELECTlist that is not an aggregate function mustlist that is not an aggregate function mustbe in the GROUP BY clause.be in the GROUP BY clause.

    SQL> SELECT deptno, COUNT(ename)

    2 FROM emp;

    SQL> SELECT deptno, COUNT(ename)

    2 FROM emp;

    SELECT deptno, COUNT(ename)*

    ERROR at line 1:

    ORA-00937: not a single-group group function

    SELECT deptno, COUNT(ename)*

    ERROR at line 1:

    ORA-00937: not a single-group group function

    Columnmissingin

    theGROUPBYcl

    ause

    Columnmissingin

    theGROUPBYcl

    ause

    Columnmissingin

    theGROUPBYcl

    ause

    Columnmissing

    intheGROUPBY

    clause

  • 8/14/2019 Les 05

    19/26

    5-19

    Illegal Queries

    Using Group Functions

    Illegal Queries

    Using Group FunctionsYou cannot use the WHERE clause to restrict

    groups.

    You use the HAVING clause to restrict groups.

    You cannot use the WHERE clause to restrictgroups.

    You use the HAVING clause to restrict groups.

    SQL> SELECT deptno, AVG(sal)

    2 FROM emp

    3 WHERE AVG(sal) > 2000

    4 GROUP BY deptno;

    SQL> SELECT deptno, AVG(sal)

    2 FROM emp

    3 WHERE AVG(sal) > 2000

    4 GROUP BY deptno;

    WHERE AVG(sal) > 2000

    *

    ERROR at line 3:

    ORA-00934: group function is not allowed here

    WHERE AVG(sal) > 2000

    *

    ERROR at line 3:

    ORA-00934: group function is not allowed hereCan

    notusethe

    WHER

    Eclau

    se

    Cannot

    usetheWH

    EREc

    lause

    torest

    rictgroups

    torest

    rictgroups

    Cannot

    usetheWH

    EREc

    lause

    Cannot

    usetheWH

    EREc

    lause

    torest

    rictgroups

    torest

    rictgroups

  • 8/14/2019 Les 05

    20/26

  • 8/14/2019 Les 05

    21/26

  • 8/14/2019 Les 05

    22/26

    5-22

    Using the HAVING ClauseUsing the HAVING Clause

    SQL> SELECT deptno, max(sal)

    2 FROM emp

    3 GROUP BY deptno

    4 HAVING max(sal)>2900;

    DEPTNO MAX(SAL)

    --------- ---------

    10 5000

    20 3000

  • 8/14/2019 Les 05

    23/26

    5-23

    Using the HAVING ClauseUsing the HAVING Clause

    SQL> SELECT job, SUM(sal) PAYROLL

    2 FROM emp

    3 WHERE job NOT LIKE 'SALES%'

    4 GROUP BY job

    5 HAVING SUM(sal)>50006 ORDER BY SUM(sal);

    JOB PAYROLL

    --------- ---------

    ANALYST 6000 MANAGER 8275

  • 8/14/2019 Les 05

    24/26

    5-24

    Nesting Group FunctionsNesting Group Functions

    SQL> SELECT max(avg(sal))

    2 FROM emp

    3 GROUP BY deptno;

    MAX(AVG(SAL))

    -------------

    2916.6667

    Display the maximum average salary.Display the maximum average salary.Display the maximum average salary.Display the maximum average salary.

  • 8/14/2019 Les 05

    25/26

    5-25

    SummarySummary

    SELECTcolumn

    ,group_function(column)FROM table

    [WHERE condition]

    [GROUP BY group_by_expression]

    [HAVING group_condition]

    [ORDER BY column];

    Order of evaluation of the clauses:Order of evaluation of the clauses:

    WHERE clause

    GROUP BY clause HAVING clause

    Order of evaluation of the clauses:Order of evaluation of the clauses:

    WHERE clause

    GROUP BY clause HAVING clause

  • 8/14/2019 Les 05

    26/26

    5-26

    Practice OverviewPractice Overview

    Showing different queries that use group functions

    Grouping by rows to achieve more than one result

    Excluding groups by using the HAVING clause

    Showing different queries that use group functions

    Grouping by rows to achieve more than one result

    Excluding groups by using the HAVING clause