db.dobo.sk

kontingenčná tabuľka v MySQL

bez komentára

Čo je kontingečná tabuľka (pivot table, RC table), vieme všetci, pretože to využívame v Exceli .>). Ako na ňu v MySQL?

Užívať sa budú len štandardné SQL konštrukcie a ziadne aplikačné nadstavby – na CLI pomocou klienta mysql. Aby so to nedemonštroval na nejakých sterilných podivuhodnostiach typu farba čapíc a pohlavie ich nositeľov, zostavím si reálnu tabuľku z každodennej praxe:

  • SJ (stratigrafické jednotky) sú tri druhy – depozit, negativ a štruktúra
  • každá SJ može byť dokumentovaná nálsedovným technickým inštrumentáriom: geodetickým meraním, výkresovo, fotogrametricky, skicou a ničím (nedefinovana).

Cieľom kontingenčnej tabuľky by bolo v reále napr zistiť potenciálne závislosti medzi typom SJ a a preferovaným spôsobom dokumentácie. Ako však technicky zostaviť dotaz na vytvorenie kontingenčnej tabuľky?

1. Vytvorenie tabuľky a import dát

pivot_table_MySQL01

 Data som naloadoval do jednej tabuľky a v prípade, že by si ich chcel niekto skúsiť, tak tu pivot_table_MySQL (štruktúra tabuľky i data).

2. Kontingenčná tabuľka

Klúčovými príkazmi DML sú ORDER BY a SUM.

SELECT typ_sj,

SUM(IF(SJ_dok.dokumentacia=”geodezia”, 1, 0)) AS geodézia,
SUM(IF(SJ_dok.dokumentacia=”vykres”, 1, 0)) AS výkres,
SUM(IF(SJ_dok.dokumentacia=”fotogrammetria”, 1, 0)) AS fotogrammetria,
SUM(IF(SJ_dok.dokumentacia=”skica”, 1, 0)) AS skicovanie,
SUM(IF(SJ_dok.dokumentacia=”nedefinovane”, 1, 0)) AS nedefinované,

COUNT(*)
FROM SJ_dok
GROUP BY typ_sj
;

pivot_table_MySQL02

3. Pokec

Príkaz je pomerne jednoduchý, zložitejšia konštrukcia je len to sumovanie v SELECTe. To je aj jediná slabosť konštruktu:

  • je nutné na začiatku vedieť, koľko typov má dokumentácia (rozsah poľa; všimni te si, že typ bol nastavený na ENUM)
  • pokiaľ by malo pole s typom dokumentácie vysokú kardinalitu, skript by bol rozsiahly

píše: ďobo

December 31st, 2012 o 1:00 am

chlievik: mysql

okomentuj