GROUP BY — Complete Guide
GROUP BY — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of SQL Server Tutorial on Toolliyo Academy.
On this page
SQL Server Tutorial · Lesson 14 of 100
GROUP BY
SQL basics → Queries → Advanced
SQL basics · 1 — SELECT · ~6 min · SQL — SQL Queries & Clauses
What is this?
GROUP BY collapses rows that share the same key and lets you run aggregates (COUNT, SUM, AVG) per group.
Why should you care?
Managers ask “orders per city” or “revenue per day” — that is GROUP BY, not a row-by-row dump.
See it live — copy this example
Run in SQL Server Management Studio (SSMS) or Azure Data Studio.
USE DataVerse;
IF OBJECT_ID(N'dbo.Orders', N'U') IS NOT NULL DROP TABLE dbo.Orders;
CREATE TABLE dbo.Orders (
OrderId INT IDENTITY(1,1) PRIMARY KEY,
City NVARCHAR(50) NOT NULL,
Amount DECIMAL(10,2) NOT NULL
);
INSERT INTO dbo.Orders (City, Amount) VALUES
(N'Pune', 1200), (N'Pune', 800), (N'Mumbai', 2500), (N'Mumbai', 400);
SELECT City, COUNT(*) AS OrderCount, SUM(Amount) AS Revenue
FROM dbo.Orders
GROUP BY City
ORDER BY Revenue DESC;
What happened?
- Rows group by City.
- COUNT(*) is orders per city; SUM(Amount) is revenue.
- Non-aggregated columns in SELECT must appear in GROUP BY.
Practice next
- Create and fill dbo.Orders.
- Run the grouped query.
- Add AVG(Amount) AS AvgOrder.
- GROUP BY LEFT(City, 1) for a fun rollup.
- Add HAVING SUM(Amount) > 1000.
Remember
GROUP BY builds one row per group key. Aggregates summarize each group. SELECT list rules are strict — group or aggregate.
City-wise sales board
Ops dashboard groups DataVerse Orders by City.
Outcome: Mumbai vs Pune revenue shows in one query.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!