Skip to content


2005 November 8
tags: , ,
by Shannon Lowder

Consider the following table, orders.

buyer             productName     purchaseDate   qtyPurchased     pricePaid
-------------     --------------- --------------- -----------     ---------
Shannon Lowder    pencil          1/1/2000         1              .25
Shannon Lowder    paper           1/1/2000         2              1.00
Shannon Lowder    Mountain Dew    1/1/2000         1              1.25
Shannon Lowder    pencil          1/5/2000         1              .25
Shannon Lowder    pencil          1/7/2000         1              .25
Shannon Lowder    Mountain Dew    1/10/2000        1              1.25
Shannon Lowder    Mountain Dew    1/11/2000        1              1.25
Shannon Lowder    Mountain Dew    1/12/2000        1              1.25
Shannon Lowder    Mountain Dew    1/13/2000        1              1.25
Shannon Lowder    Mountain Dew    1/14/2000        1              1.25

How would we find out the total number of pencils I purchased?

You could do that with a WHERE clause.

What if I wanted to see a quantity of each product I ordered?

Now that’s different.

If you need to use an aggregate function and break down that aggregate by categories (or groups), then you’re going to need to learn the GROUP BY clause.  This clause will help you summarize data by these groups.  So basically I’m going to teach you an add-on to the aggregate functions lesson.

Let’s dive right in.

Problem 1: Show me the total quantities purchased, broken down by product.

   , SUM(qty) as [total quantity]
FROM orders

productName    total quantity
------------    --------------
pencil		     3
paper		     2
Mountain Dew         6

Pretty easy, right? You can group by any one column or multiple columns. Grouping by multiple columns is a fundamental for most reports you’ll be asked to write. You will eventually be asked a question like:

Problem 2: Show me a Report of Which Products Were Sold, by Month?

At first this seems more difficult, but really, all you’ll have to do is add an additional column to your SELECT and GROUP BY list. I would like to take an aside here, and point out, sometimes business requirements aren’t entirely clear. This example is a great case to consider ambiguity in a request. Is product name the “main” or first group, or is the month, the first group? In this case, we’re going to use productName as the first group.

   , MONTH(purchaseDate) as [Month]
   , SUM(qty) as [total quantity]
FROM orders
   , MONTH(purchaseDate)

productName     Month	total quantity
------------    -----   --------------
pencil		1	3
paper		1	2
Mountain Dew    1       6

Since all the data in my example happened in January 2000, all the counts from before appear as they did before. This time we just have the extra column in the output. This is also the time where I will point out you can use functions in your GROUP BY clause, and as long as it’s not an aggregate function (like SUM, MAX, MIN, etc) you can use it!


The GROUP BY clause is a fundamental part of reporting. Experiment with it, and become comfortable with it. If you have any questions, send them in! I’m here to help you learn all about SQL.

Previous: Summarizing Data Next: Sub Queries
4 Responses leave one →
  1. January 7, 2006

    This is a very useful post.

  2. January 8, 2006

    This is such a Nice article that i have falling short of words to appreciate you. The Example you have provided can givethe reader a clear insight of group by caluse. Keep writing such articles and serving the world .Add few more examples and also write some thing on Distinct Clause as well

  3. January 8, 2006

    That was englighting! Thanks!

Trackbacks and Pingbacks

  1. SQL 101 – Summarizing Data | Shannon Lowder

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS