Database Reference
In-Depth Information
SELECT
*
FROM
crosstab(
'SELECT extract(year from starts) as year,
extract(month from starts) as month, count(
*
)
FROM events
GROUP BY year, month'
,
'SELECT
*
FROM month
_
count'
);
ERROR: a column definition list is required for functions returning "record"
Ups, eine Fehlermeldung.
Das hört sich etwas kryptisch an, bedeutet aber, dass die Funktion eine Rei-
he von Datensätzen (Zeilen) zurückgibt und nicht weiß, wie sie sie benennen
soll. Tatsächlich weiß sie nicht einmal, um welche Datentypen es sich han-
delt.
Denken Sie daran, dass die Pivot-Tabelle die Monate als Kategorie verwendet,
aber diese Monate sind einfach nur Integerwerte. Daher definieren wir sie wie
folgt:
SELECT
*
FROM
crosstab(
'SELECT extract(year from starts) as year,
extract(month from starts) as month, count(
*
)
FROM events
GROUP BY year, month'
,
'SELECT
*
FROM month
_
count'
)
AS
(
year int
,
jan
int
, feb
int
, mar
int
, apr
int
, may
int
, jun
int
,
jul
int
, aug
int
, sep
int
, oct
int
, nov
int
, dec
int
)
ORDER BY YEAR
;
Wir haben eine Spalte für das Jahr (die Zeilen-ID) und zwölf weitere Spalten
für die Monate.
year
| jan | feb | mar | apr | may | jun | jul | aug | sep | oct | nov | dec
-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----
2012 |
|
5 |
|
1 |
1 |
|
|
|
|
|
|
1
Fügen Sie zusätzliche Events für ein anderes Jahr ein, um sich auch de-
ren Anzahl ausgeben zu lassen. Führen Sie die crosstab-Funktion aus und
genießen Sie Ihren Kalender.
Was wir am zweiten Tag gelernt haben
Heute haben wir die Grundlagen von PostgreSQL abgeschlossen. Wir begin-
nen zu erkennen, dass Postgres mehr ist, als einfach nur ein Server zum
Speichern der üblichen Datentypen und ihre Abfrage. Es ist eine Datenbank-
Management-Engine, mit der man die zurückgelieferten Daten umformatie-