Hromadné statistiky — Katastr nemovitostí ČR

Přehled nad vlastnickou databází ČÚZK. Souhrny, žebříčky a rozložení počítané hromadně přes celý dataset.

Zdroj: PostgreSQL 18 · public."data" Objem: ~5,3 mil. řádků Klíčové sloupce: "VlastnikJmeno", "OmezeniNaNemovitosti", "PocetVlastniku", "ZpusobVyuziti", "PlatiOd" Stav: reálná data z exportu
5 332 200
Záznamů v databázi
řádků v public."data"
3 644 059
Unikátních vlastníků
jméno + adresa (byty/SJM nadhodnocují)
93,5 %
Fyzické osoby
zbytek: firmy, obce, SVJ, cizinci
2 670
PSČ v adresách vlastníků
z pole "VlastnikPSC"
0,27
Gini koncentrace
nerovnoměrnost vlastnictví

Struktura vlastníků

Typy vlastníků

Klasifikace podle vzoru ve jménu / adrese. Fyzické osoby zahrnují i SJM manželů.

3,6M vlastníků
Fyzická osoba (vč. SJM)93,5 %
Právnická osoba – firma1,9 %
Obec / kraj / stát1,3 %
SVJ / bytové družstvo3,0 %
Zahraniční vlastník0,2 %
SQL
SELECT
  CASE
    WHEN "VlastnikJmeno" ~* '(s\.r\.o\.|a\.s\.|v\.o\.s\.|k\.s\.|s\.p\.|z\.s\.)' THEN 'PO – firma'
    WHEN "VlastnikJmeno" ~* '(obec |m[ěe]sto |kraj |republika|statut)' THEN 'Obec / stát'
    WHEN "VlastnikJmeno" ~* '(spole[čc]enstv[íi]|bytov[ée] dru[žz])' THEN 'SVJ / BD'
    WHEN "VlastnikAdresa" !~ '[0-9]{3} ?[0-9]{2}' THEN 'Zahraniční'
    ELSE 'Fyzická osoba'
  END AS typ,
  count(*) AS pocet
FROM public."data"
GROUP BY 1 ORDER BY 2 DESC;

Nejčastější příjmení

Kolik různých vlastníků nese dané příjmení – četnost jména, ne velikost vlastnictví. Ženské a mužské tvary zvlášť. Reálná data.

SQL
SELECT split_part("VlastnikJmeno",' ',1) AS prijmeni,
       count(DISTINCT ("VlastnikJmeno"||'|'||"VlastnikAdresa")) AS vlastniku
FROM public."data"
WHERE "VlastnikJmeno" !~* '(s\.r\.o\.|a\.s\.|obec|město|kraj|dru[žz]stvo|spole)'
GROUP BY 1 ORDER BY 2 DESC LIMIT 15;

Koncentrace & žebříčky

Největší vlastníci podle počtu nemovitostí

Bez státu a samospráv. Top 50 · agregace na vlastníka (jméno + adresa).

SQL

Koncentrace vlastnictví (Lorenzova křivka)

Jaký podíl všech nemovitostí drží nejmenší procento vlastníků. Čím větší prohnutí od úhlopříčky, tím nerovnoměrnější rozdělení.

Reálná data. Gini a Top-podíly jsou spočítané z rozdělení počtu věcí na vlastníka (jméno+adresa). Křivka je schematická. Strukturální spoluvlastnictví bytů koncentraci mírně snižuje.
podíl vlastníků → podíl nemovitostí →
11,3 %
nemovitostí drží nejaktivnějších 1 % vlastníků
49,0 %
nemovitostí drží horních 10 % vlastníků
1
medián počtu nemovitostí na vlastníka
0,27
Gini koeficient (0 = rovnost, 1 = maximum)
SQL
WITH vl AS (
  SELECT count(*) AS n
  FROM public."data"
  GROUP BY "VlastnikJmeno", "VlastnikAdresa"
), r AS (
  SELECT n, percent_rank() OVER (ORDER BY n DESC) AS pct FROM vl
)
SELECT
  round(100.0*sum(n) FILTER(WHERE pct<=0.01)/sum(n),1) AS top1_pct,
  round(100.0*sum(n) FILTER(WHERE pct<=0.10)/sum(n),1) AS top10_pct
FROM r;

Geografie vlastníků

Rozložení podle okresu

Počet záznamů podle okresu nemovitosti (top 15). Reálná data z pole "Okres".

SQL
SELECT "Okres", count(*) AS zaznamu
FROM public."data"
GROUP BY 1 ORDER BY 2 DESC;

Zahraniční vlastníci podle země

Adresy bez českého PSČ, seskupené podle země.

SQL
SELECT substring("VlastnikAdresa" from '([^,]+)$') AS zeme,
       count(*) AS pocet
FROM public."data"
WHERE "VlastnikAdresa" !~ '[0-9]{3} ?[0-9]{2}'
GROUP BY 1 ORDER BY 2 DESC LIMIT 10;

Zatížení nemovitostí

Zatížení nemovitostí

Podíl záznamů, které v části C nesou aspoň jedno omezení — zástavní právo (typicky hypotéka), exekuci nebo věcné břemeno. Reálná data z pole "OmezeniNaNemovitosti".

47,2 % se zatížením
25,3 %
Zástavní právo — nejčastěji hypotéka banky
0,7 %
Exekuce / soudcovské zástavní právo
17,4 %
Věcné břemeno — služebnost, právo dožití
52,8 %
bez zápisu omezení v části C

Součet tří hlavních typů (43,4 %) je nižší než 47,2 % — zbytek tvoří další zápisy (zákaz zcizení a zatížení, poznámky). Jeden záznam může nést víc omezení zároveň.

Rozpad podle konkrétní banky/věřitele nejde — pole "OmezeniNaNemovitosti" obsahuje jen druh zápisu („Zástavní právo smluvní", „Zákaz zcizení", „Věcné břemeno"…), ne jméno věřitele.
SQL
-- podíl záznamů s aspoň jedním omezením + rozpad typů (část C LV)
SELECT
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" IS NOT NULL AND "OmezeniNaNemovitosti" <> '')/count(*),1) AS pct_zatizenych,
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" ~* 'z[áa]stavn[íi] pr[áa]vo')/count(*),1) AS pct_zastava,
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" ~* 'exeku')/count(*),1) AS pct_exekuce,
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" ~* 'v[ěe]cn[ée] b[řr]emeno|slu[žz]ebnost')/count(*),1) AS pct_bremeno
FROM public."data";

Zatížení podle okresu

Podíl záznamů se zápisem v části C podle okresu nemovitosti — rozpad na zástavní právo, exekuci a věcné břemeno (top 14 podle zástav). Reálná data.

Zástavní právoExekuceVěcné břemeno
SQL
-- podíl zatížených nemovitostí podle okresu
SELECT "Okres",
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" ~* 'z[áa]stavn[íi] pr[áa]vo')/count(*),1) AS zastava_pct,
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" ~* 'exeku')/count(*),1) AS exekuce_pct,
  round(100.0*count(*) FILTER(WHERE "OmezeniNaNemovitosti" ~* 'v[ěe]cn[ée] b[řr]emeno|slu[žz]ebnost')/count(*),1) AS bremeno_pct
FROM public."data"
GROUP BY 1 ORDER BY 2 DESC;
-- pozn.: procenta typů se mohou překrývat (jeden LV může nést víc omezení)

Roztříštěnost vlastnictví

Spoluvlastnictví a drobení pozemků

Kolik pozemků a budov (mimo bytové jednotky) drží víc spoluvlastníků. Reálné dědické drobení sedí hlavně v pásmech 3+ spoluvlastníků a týká se nejčastěji zemědělských a lesních pozemků a historických polních cest.

Pozor na metodiku. „Počet spoluvlastníků" je v katastru z velké části strukturální, ne drobení: SJM manželů se počítá jako 2 vlastníci a pozemky pod bytovými domy drží všichni majitelé jednotek. Proto tahle karta vylučuje bytové jednotky (podle "ZpusobVyuziti") a pásmo „2" (často SJM) ber s rezervou — vypovídající je až 3+. Reálná data, počítáno vážením 1/"PocetVlastniku" na jednu věc.
18,8 % spoluvlastnictví
18,8 %
pozemků/budov (mimo byty) má víc než 1 spoluvlastníka
3,5 %
3 a více spoluvlastníků (jádro drobení)
2,3
průměrný počet podílů (jen u spoluvlastněných)
574
nejvyšší zjištěný počet spoluvlastníků (pozemek)

Rozdělení pozemků a budov podle počtu spoluvlastníků (bez bytových jednotek):

SQL
-- rozdělení POZEMKŮ a BUDOV (mimo byty) podle počtu spoluvlastníků
-- každý řádek = 1/"PocetVlastniku" jedné věci (nepotřebuje id věci)
SELECT
  CASE WHEN p <= 1 THEN '1 vlastník'
       WHEN p = 2 THEN '2 (často SJM)'
       WHEN p BETWEEN 3 AND 5 THEN '3–5'
       WHEN p BETWEEN 6 AND 10 THEN '6–10'
       WHEN p BETWEEN 11 AND 50 THEN '11–50'
       ELSE '51+' END AS pasmo,
  round(sum(1.0/p)) AS veci
FROM (
  SELECT "PocetVlastniku" AS p FROM public."data"
  WHERE ("ZpusobVyuziti" IS NULL OR "ZpusobVyuziti" !~* 'byt|jednotk')
    AND "PocetVlastniku" >= 1
) x
GROUP BY 1 ORDER BY min(p);

Typologie nemovitostí

Skladba podle způsobu využití

Počet věcí podle pole "ZpusobVyuziti" (rodinný dům, byt, rekreační stavba, zemědělská stavba…), vážený na jednu věc přes 1/"PocetVlastniku". Reálná data.

Pozor na definici: katastrální bytová jednotka (v domě rozděleném na jednotky) není totéž co byt ze sčítání. Sčítání 2021 uvádí ~4,5 mil. bytů (obydlí, vč. bytů v rodinných a činžovních domech), kdežto v KN je samostatnou jednotkou jen byt v domě rozděleném na jednotky — proto je tu „byt" ~2,0 mil.
SQL
-- skladba podle způsobu využití (vážená na jednu věc)
SELECT "ZpusobVyuziti", round(sum(1.0/"PocetVlastniku")) AS veci
FROM public."data"
WHERE "ZpusobVyuziti" IS NOT NULL AND "PocetVlastniku" >= 1
GROUP BY 1 ORDER BY 2 DESC;

Transakční aktivita

Vznik současného vlastnictví v čase

Rok, od kterého platí současný vlastnický zápis (pole "PlatiOd") — vrchol 2021 (277 tis.). Reálná data.

Pozor na výklad. Není to počet převodů, ale od kdy drží věc dnešní vlastník — snímek eviduje jen aktuální stav, ne historii. Skoky 2012 a 2015 a nižší starší roky jsou nejspíš dané hromadnými zápisy / importem operátu, ne trhem. Pro čistou historii převodů by byl potřeba dataset řízení o vkladu (V-…).
SQL
-- rok vzniku současného vlastnictví (pole PlatiOd)
SELECT rok, count(*) AS pocet FROM (
  SELECT (substring("PlatiOd"::text from '(\d{4})'))::int AS rok
  FROM public."data" WHERE "PlatiOd" IS NOT NULL
) t WHERE rok BETWEEN 1993 AND 2026 GROUP BY 1 ORDER BY 1;