extra1, extra2, ...
er "ekstra kolonner" i krydstabuleringsterminologi.
Manualen til tablefunc-modulet
forklarer reglerne:
Og længere nede:
Fed vægt på nøgledele af mig.
Du sorterer kun efter row_name
:
ORDER BY row_name ASC
Det betyder ikke noget i det første eksempel, hvor du filtrerer med:
WHERE ... t.extra1 = 'val1' -- single quotes by me
Alle inputrækker har extra1 = 'val1'
alligevel. Men det betyder noget i det andet eksempel, hvor du filtrerer med:
WHERE ... t.extra1 IN('val1', ...) --> More values
Nu er det første krav med fed skrift ovenfor overtrådt for den ekstra kolonne extra1
. Mens sorteringsrækkefølgen for den første inputforespørgsel er ikke-deterministisk, resulterer de resulterende værdier for kolonnen "ekstra" extra1
er valgt vilkårligt. De flere mulige værdier for extra1
, jo færre rækker ender med at have 'val1':det er det, du har observeret.
Du kan stadig få det til at fungere:at rapportere extra1 = 'val1'
for hver row_name
der har mindst én af dem, skal du ændre ORDER BY
til:
ORDER BY row_name, (extra1 <> 'val1')
Sorterer 'val1' øverst. Forklaring på den boolean
udtryk (med links til mere):
Andre "ekstra" kolonner vælges stadig vilkårligt, mens sorteringsrækkefølgen ikke er deterministisk.
Grundlæggende om krydstabeller:
- PostgreSQL krydstabulatorforespørgsel
- Postgresql krydstabel forespørgsel med flere "rækkenavn"-kolonner