GROUP BY Versus ORDER BY

Team-Fly    

 
Sams Teach Yourself SQL in 24 Hours, Third Edition
By Ronald R. Plew, Ryan K. Stephens
Table of Contents
Hour 10.  Sorting and Grouping Data


GROUP BY Versus ORDER BY

You should understand that the GROUP BY clause works the same as the ORDER BY clause in that both are used to sort data. The ORDER BY clause is specifically used to sort data from a query; the GROUP BY clause also sorts data from a query to properly group the data. Therefore, the GROUP BY clause can be used to sort data the same as the ORDER BY clause.

There are some differences and disadvantages of using GROUP BY for sorting operations:

  • All non-aggregate columns selected must be listed in the GROUP BY clause.

  • Integers cannot be used in the GROUP BY to represent columns after the SELECT keyword, similar to using the ORDER BY clause.

  • The GROUP BY clause is generally not necessary unless using aggregate functions.

An example of performing sort operations utilizing the GROUP BY clause in place of the ORDER BY clause is shown next :

 graphics/input_icon.gif  SELECT LAST_NAME, FIRST_NAME, CITY   FROM EMPLOYEE_TBL   GROUP BY LAST_NAME;  graphics/output_icon.gif SELECT LAST_NAME, FIRST_NAME, CITY                   * ERROR at line 1: ORA-00979: not a GROUP BY expression 

In this example, an error was received from the database server stating that FIRST_NAME is not a GROUP BY expression. Remember that all columns and expressions in the SELECT must be listed in the GROUP BY clause, with the exception of aggregate columns (those columns targeted by an aggregate function

graphics/note_icon.gif

Different SQL implementations will return errors in different formats.


In the next example, the previous problem is solved by adding all expressions in the SELECT to the GROUP BY clause,:

 graphics/input_icon.gif  SELECT LAST_NAME, FIRST_NAME, CITY   FROM EMPLOYEE_TBL   GROUP BY LAST_NAME, FIRST_NAME, CITY;  graphics/output_icon.gif LAST_NAM FIRST_NA CITY -------- -------- ------------ GLASS    BRANDON  WHITELAND GLASS    JACOB    INDIANAPOLIS PLEW     LINDA    INDIANAPOLIS SPURGEON TIFFANY  INDIANAPOLIS STEPHENS TINA     GREENWOOD WALLACE  MARIAH   INDIANAPOLIS 6 rows selected. 

In this example, the same columns were selected from the same table, but all columns in the GROUP BY clause are listed as they appeared after the SELECT keyword. The results were ordered by LAST_NAME first, FIRST_NAME second, and CITY third. These results could have been accomplished easier with the ORDER BY clause; however, it may help you better understand how the GROUP BY works if you can visualize how it must first sort data to group data results.

The following example shows a SELECT from EMPLOYEE_TBL and uses the GROUP BY to order by CITY, which leads into the next example:

 graphics/input_icon.gif  SELECT CITY, LAST_NAME   FROM EMPLOYEE_TBL   GROUP BY CITY, LAST_NAME;  graphics/output_icon.gif CITY         LAST_NAME ------------ --------- GREENWOOD    STEPHENS INDIANAPOLIS GLASS INDIANAPOLIS PLEW INDIANAPOLIS SPURGEON INDIANAPOLIS WALLACE WHITELAND    GLASS 6 rows selected. 

Notice the order of data in the previous results, as well as the LAST_NAME of the individual for each CITY. All employee records in the EMPLOYEE_TBL table are now counted, and the results are grouped by CITY but ordered by the count on each city first.

 graphics/input_icon.gif  SELECT CITY, COUNT(*)   FROM EMPLOYEE_TBL   GROUP BY CITY   ORDER BY 2,1;  graphics/output_icon.gif CITY           COUNT(*) -------------- -------- GREENWOOD             1 WHITELAND             1 INDIANAPOLIS          4 

Notice the order of the results. The results were first sorted by the count on each city (14), and then by city. The count for the first two cities in the output is 1. Because the count is the same, which is the first expression in the ORDER BY clause, the city is then sorted; GREENWOOD is placed before WHITELAND.

Although GROUP BY and ORDER BY perform a similar function, there is one major difference. The GROUP BY is designed to group identical data, whereas the ORDER BY is designed merely to put data into a specific order. GROUP BY and ORDER BY can be used in the same SELECT statement, but must follow a specific order. The GROUP BY clause is always placed before the ORDER BY clause in the SELECT statement.

graphics/tip_icon.gif

The GROUP BY clause can be used in the CREATE VIEW statement to sort data, but the ORDER BY clause is not allowed in the CREATE VIEW statement. The CREATE VIEW statement is discussed in depth in Hour 20, "Creating and Using Views and Synonyms."



Team-Fly    
Top
 


Sams Teach Yourself SQL in 24 Hours
Sams Teach Yourself SQL in 24 Hours (5th Edition) (Sams Teach Yourself -- Hours)
ISBN: 0672335417
EAN: 2147483647
Year: 2002
Pages: 275

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net