- Simple Queries (4)
- Setting criteria using WHERE (5)
- Calculations (7)
- Calculations using dates (4)
- Basic joins (8)
- More exotic joins (2)
- Aggregation and grouping (8)
- Views (5)
- Subqueries (5)
- Stored procedures (5)
- Variables (8)
- Parameters and return values (11)
- Testing conditions (1)
- Looping (3)
- Scalar functions (6)
- Transactions (5)
- Creating tables (5)
- Temporary tables and table variables (9)
- Table-valued functions (6)
- Derived tables and CTEs (13)
- Dynamic SQL (4)
- Pivots (2)
- Triggers (2)
- Archived (70)
SQL | Aggregation and grouping exercise | Show the number of episodes written by each author
This exercise is provided to allow potential course delegates to choose the correct Wise Owl Microsoft training course, and may not be reproduced in whole or in part in any format without the prior written consent of Wise Owl.
You need a minimum screen resolution of about 700 pixels width to see our exercises. This is because they contain diagrams and tables which would not be viewable easily on a mobile phone or small laptop. Please use a larger tablet, notebook or desktop computer, or change your screen resolution settings.
If you haven't already done so, run the script in the above folder to generate the Doctor Who database.
The following diagram shows how the authors and episodes tables are related:
You're probably familiar with this by now!
Use this to show for each author:
- the number of episodes they wrote;
- their earliest episode date; and
- their latest episode date.
If you sort these so that the most prolific authors come first, here are the first few of the 25 rows you should see:
Those who know their Doctor Who won't be surprised at the two leaders.
Save this query as Blink was the best, then close it down.
with aut as (
select count(title) as [Number of episodes wrote],AuthorId from tblEpisode
group by AuthorId
select a.Authorname,b.[Number of episodes wrote],max(c.episodeDate) as [Latest Episode Date],min(c.episodedate) as [Earliest Episode Date] from tblAuthor a
inner join aut b on a.AuthorId=b.authorId
inner join tblEpisode c on a.AuthorId=c.AuthorId
group by AuthorName,[Number of episodes wrote]
order by [Number of episodes wrote] desc
SELECT [AuthorName], COUNT([EpisodeId]) AS [# OF EPISODES],
MIN([EpisodeDate]) AS [Earliest epi Date],
max([EpisodeDate]) as [latest epi Date]
FROM [dbo].[tblAuthor] AS A INNER JOIN [dbo].[tblEpisode] AS E
ON A.AuthorId = E.AuthorId
GROUP BY [AuthorName]
order by [# OF EPISODES] desc;
select AuthorName, count(EpisodeNumber), EpisodeDate as [Earliest date], EpisodeDate as [Latest date] from
tblAuthor INNER JOIN tblEpisode ON tblAuthor.AuthorId=tblEpisode.AuthorId
group by AuthorName, EpisodeDate
order by [Earliest date] asc, [Latest date] desc
What is the problem with my code?