How to compare two HDB towns without fooling yourself
To compare two HDB districts fairly, hold four things constant before you read a dollar of difference: the measurement window, the flat type, the remaining lease and the floor. Or let the data do it: the mix-adjusted rate on every district page reprices each district at the national flat-type mix, and it is the figure this site ranks districts on. Two raw medians side by side are not yet a comparison.
Why do two medians mislead on their own?
Because each one is computed over whatever happened to sell there, and the two somethings are rarely alike. One district’s resales lean to five-room flats on long leases; the other’s to three-rooms in older blocks. Their medians then differ before any like-for-like flat differs, which is the same composition trap that lets a national median move when no price moves. A gap between two blended figures is a fact about what sold, not yet a fact about what anything costs.
What does a real pair look like?
Two outer districts from the current window make the trap concrete.
| Measure | Pasir Ris | Bukit Batok |
|---|---|---|
| Median rate, all resales | S$560 per sq ft | S$618 per sq ft |
| Mix-adjusted rate | S$638 per sq ft | S$620 per sq ft |
| Median resale price | S$720,000 | S$610,000 |
| 4-room median price | S$636,888 | S$630,000 |
| Median remaining lease | 67 years | 91 years |
| Resales in the window | 744 (12 months) | 1,385 (12 months) |
Read the first row alone and Pasir Ris looks the cheaper district, by S$58 per square foot on the blended median. Reweight both districts to the national flat-type mix and the order reverses: on a like-for-like basket it is Bukit Batok that comes out cheaper. Nothing in either market moved between those two rows. The blended figure is answering “what sold here”, the mix-adjusted one “what does the same flat cost here”, and only the second is a price comparison.
What must you hold constant before comparing?
The window. Each area here uses the shortest window in the 12, 18, 24-month ladder that gives it at least 30 resales. A busy district gets 12 months; a quiet one may need 24, and an area that cannot reach 30 resales even at 24 months publishes its count instead of reaching further back. The national median rate has compounded at 4.3% a year in cash terms since 2016 Q1, so a longer window blends a cheaper market into today’s figure. A 12-month median and a 24-month median are different statistics, and the comparison pages say so when the two areas differ.
Flat type. A district whose resales are mostly three-rooms will show a higher rate per square foot than a district of five-rooms even if a like-for-like flat costs the same in both, because smaller flats carry higher rates almost everywhere. Use the by-flat-type table on each district page rather than the headline when you are comparing, and compare four-room against four-room, not headline against headline.
Lease. A mature district with a median lease near 60 years and a young one near 90 are not comparable at the headline: the remaining term is priced, and priced heavily once the tail shortens. The lease band charts let you compare band against band, which is the only version of the comparison that means anything.
Floor. Less important than the other three, but the same principle: if one district’s stock is taller, its median carries more high-floor resales, and the market pays for height. The storey table on each district page shows how much, there.
Which single figure adjusts for the mix?
The mix-adjusted rate, and it exists precisely so that a reader does not have to run the four controls by hand. It takes each district’s own rate per flat type and reweights them to the national mix of flat types, so every district is priced over the same basket. That is the only estimator the league tables rank on, and where it disagrees with the blended median, the disagreement is measuring composition, exactly as in the pair above. It controls for flat type, not for lease or floor, so a large residual gap still deserves the lease-band check.
Can you compare growth instead of levels?
With one extra control, because a growth comparison inherits every trap above and adds its own: the span. Each district’s compound annual growth rate is measured over that district’s own published run of quarters, and the runs are not all the same length, because a trend starts only where a district has enough resales to trust. The fastest-growing league table refuses to rank a district measured over a different span from the rest for exactly this reason: a compound annual rate over one period is not comparable with one over another. Hold a hand comparison to the same rule.
The worked pair above clears that control this window: both rates are measured over the same 9.8-year span, Pasir Ris compounding at 4.7% a year in cash terms and Bukit Batok at 5.1%. Then apply the mix rule again before reading the gap: a blended median’s growth inherits the mix shifts of everything that sold along the way, so a district whose resales drifted towards larger flats shows growth no like-for-like flat experienced.
When should you refuse the comparison?
When the samples cannot carry it. A district below the 30-resale floor publishes a count rather than a median, and no comparison against a withheld figure means anything. When the windows differ, say a 12-month district against a 24-month one, the gap includes up to a year of market movement that has nothing to do with either place. And at neighbourhood grain, where samples thin fast, prefer the district pages: a bad comparison at a fine grain is worse than a fair one at a coarse grain.
Where do you run it?
The comparison pages put two districts side by side on price, lease and volume with the windows stated, and flag the mismatches this article warns about. Start there, then open both district pages and compare the same flat type and the same lease band. It is four lookups instead of one, and it is the difference between a comparison and a coincidence. Every figure on this page is read live from the published dataset and is current to August 2026.
Sources
- HDB Resale Flat Prices, Housing & Development Board, via Data.gov.sg
Every resale price behind every figure on this page, from 1990.
Singapore Open Data Licence v1.0.
- IndexProp SG methodology
Every rule behind the figures on this page.
See it in the data
The districts this article reads against, each with its own median, price history and resales table.
- TampinesS$620
- BedokS$588
- Jurong WestS$518
- WoodlandsS$526
- SengkangS$633
- PunggolS$694
- YishunS$567
- HougangS$607
- Choa Chu KangS$516
- Bukit BatokS$618
- Bukit PanjangS$573
- Pasir RisS$560
Want the numbers for your area?
Search any district, neighbourhood or street for free price per square foot statistics, resale prices and price history.