FORMULA & SQL / TOTALS
Count rows for each group.
Tested, not guessed.
The Excel and Google Sheets formula and the SQL query, each run on the rows below. Open this with your own data ↗
The example rows
| Row | A: Region | B: Rep | C: Amount | D: Order Date | E: Status | F: Customer |
|---|---|---|---|---|---|---|
| 2 | North | Ana | 1,200 | 2026-03-01 | Paid | Jo Smith |
| 3 | South | Ben | 450 | 2026-03-15 | Open | Raj Patel |
| 4 | North | Cy | 300 | 2026-04-02 | Paid | Lee Wong |
| 5 | East | Ana | 980.50 | 2026-04-20 | Paid | Mia Ross |
| 6 | North | Ben | 75 | 2026-05-05 | Open | Jo Smith |
| 7 | West | Dee | 1,640 | 2026-05-18 | Paid | Sam Okoro |
The formula
Excel
=SORT(LET(g,UNIQUE(A2:A7),HSTACK(g,COUNTIF(A2:A7,g))),2,-1)
Google Sheets
=ARRAYFORMULA(SORT(LET(g,UNIQUE(A2:A7),HSTACK(g,COUNTIF(A2:A7,g))),2,-1))
One row per group with how many rows it has, largest first.
Spills a summary table, largest first. Needs Excel 365 or Google Sheets.
Run on the example rows:
| A | B |
|---|---|
| North | 3 |
| South | 1 |
| East | 1 |
| West | 1 |
The SQL
PostgreSQL
SELECT region, COUNT(*) AS row_count FROM sales GROUP BY region ORDER BY row_count DESC
Run on the example rows:
| region | row_count |
|---|---|
| North | 3 |
| West | 1 |
| South | 1 |
| East | 1 |
Other databases
MySQL
SELECT region, COUNT(*) AS row_count FROM sales GROUP BY region ORDER BY row_count DESC
SQL Server
SELECT region, COUNT(*) AS row_count FROM sales GROUP BY region ORDER BY row_count DESC
SQLite
SELECT region, COUNT(*) AS row_count FROM sales GROUP BY region ORDER BY row_count DESC
BigQuery
SELECT region, COUNT(*) AS row_count FROM sales GROUP BY region ORDER BY row_count DESC
Snowflake
SELECT region, COUNT(*) AS row_count FROM sales GROUP BY region ORDER BY row_count DESC
Your own data
Paste your rows into the free tool and it writes this for your columns, then runs it on your data before you copy it. Open the tool ↗