Table of Contents
- About the Authors
- Tell Us What You Think!
- Part I: A SQL Concepts Overview
- Hour 1. Welcome to the World of SQL
- Part II: Building Your Database
- Hour 2. Defining Data Structures
- Hour 3. Managing Database Objects
- Hour 4. The Normalization Process
- Hour 5. Manipulating Data
- Hour 6. Managing Database Transactions
- Part III: Getting Effective Results from Queries
- Hour 7. Introduction to the Database Query
- Hour 8. Using Operators to Categorize Data
- Hour 9. Summarizing Data Results from a Query
- Hour 10. Sorting and Grouping Data
- Hour 11. Restructuring the Appearance of Data
- Hour 12. Understanding Dates and Times
- Part IV: Building Sophisticated Database Queries
- Hour 13. Joining Tables in Queries
- Hour 14. Using Subqueries to Define Unknown Data
- Hour 15. Combining Multiple Queries into One
- Part V: SQL Performance Tuning
- Hour 16. Using Indexes to Improve Performance
- Hour 17. Improving Database Performance
- Part VI: Using SQL to Manage Users and Security
- Hour 18. Managing Database Users
- Hour 19. Managing Database Security
- Part VII: Summarized Data Structures
- Hour 20. Creating and Using Views and Synonyms
- Hour 21. Working with the System Catalog
- Part VIII: Applying SQL Fundamentals in Today's World
- Hour 22. Advanced SQL Topics
- Hour 23. Extending SQL to the Enterprise, the Internet, and the Intranet
- Hour 24. Extensions to Standard SQL
- Part IX: Appendixes
- Appendix A. Common SQL Commands
- Appendix B. Using MySQL for Exercises
- Appendix C. Answers to Quizzes and Exercises
- Appendix D. <tt>CREATE TABLE</tt> Statements for Book Examples
- Appendix E. <tt>INSERT</tt> Statements for Data in Book Examples
- Appendix F. Glossary
- Appendix G. Bonus Exercises
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
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 (1–4), 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.