SQL GROUP BY One Column

The simplest, most common shape — one column decides the groups, one aggregate summarizes each one.

What & Why

Grouping by a single column is by far the most common pattern you'll write — "total X per Y" or "average X per Y" questions almost always start here. The previous lesson walked through the full mechanics; this lesson is about recognizing the pattern quickly and applying it directly.

The shape is always the same: SELECT grouping_column, aggregate(other_column) FROM table GROUP BY grouping_column. Once that structure feels automatic, reaching for it becomes second nature.

See How It Works

BUSINESS QUESTION

Growth wants one user count for each acquisition channel.

idcreated_atcountrychannelplanactivated_atchurned_at
1012024-01-15 09:10:00+00USorganicpro2024-01-16 14:25:00+00NULL
1022024-02-10 11:05:00+00CApaidfreeNULL2024-03-20 10:00:00+00
1032024-03-12 16:35:00+00GBreferralpro2024-03-13 08:15:00+00NULL
1042024-04-01 13:20:00+00USorganicfree2024-04-03 12:00:00+00NULL
EXAMPLE QUERY
SELECT
  channel,
  COUNT(*) AS user_count
FROM growth.users
GROUP BY channel
ORDER BY user_count DESC, channel;
RESULT — exact output from the displayed Queryflo rows
channeluser_count
organic2
paid1
referral1

The four growth.users rows form three real channel groups.

Now You Try

Practice this concept

Growth wants one user count for each acquisition channel.

Available schema
growth

Prefix tables with growth.table_name.

channeluser_count
growth.users
ColumnType
idinteger
created_attimestamp with time zone
countrytext
channeltext
plantext
activated_attimestamp with time zone
churned_attimestamp with time zone
legacy_user_codetext
query.sql
Intermediate business practice

Sign up free to try it on a real business scenario