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 : SELECT LAST_NAME, FIRST_NAME, CITY FROM EMPLOYEE_TBL GROUP BY LAST_NAME; 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 | 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,: SELECT LAST_NAME, FIRST_NAME, CITY FROM EMPLOYEE_TBL GROUP BY LAST_NAME, FIRST_NAME, CITY; 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: SELECT CITY, LAST_NAME FROM EMPLOYEE_TBL GROUP BY CITY, LAST_NAME; 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. SELECT CITY, COUNT(*) FROM EMPLOYEE_TBL GROUP BY CITY ORDER BY 2,1; 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. | 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." | |