extra1, extra2, ... sind "zusätzliche Spalten" in Kreuztabellen-Terminologie.
Das Handbuch für das Modul tablefunc
erklärt die Regeln:
Und weiter unten:
Fette Hervorhebung wichtiger Teile von mir.
Sie sortieren nur nach row_name :
ORDER BY row_name ASC
Im ersten Beispiel spielt es keine Rolle, wo Sie filtern mit:
WHERE ... t.extra1 = 'val1' -- single quotes by me
Alle Eingabezeilen haben extra1 = 'val1' ohnehin. Aber im zweiten Beispiel ist es wichtig, wo Sie filtern mit:
WHERE ... t.extra1 IN('val1', ...) --> More values
Jetzt wird die erste fettgedruckte Anforderung oben für die zusätzliche Spalte extra1 verletzt . Während die Sortierreihenfolge der ersten Eingabeabfrage nicht deterministisch ist, ergeben sich Werte für die "extra"-Spalte extra1 werden willkürlich ausgewählt. Je mehr mögliche Werte für extra1 , je weniger Zeilen am Ende 'val1' haben:das haben Sie beobachtet.
Sie können es trotzdem zum Laufen bringen:extra1 = 'val1' melden für jeden row_name das mindestens eines davon hat, ändern Sie den ORDER BY zu:
ORDER BY row_name, (extra1 <> 'val1')
Sortiert 'val1' oben. Erklärung für diesen boolean Ausdruck (mit Links zu weiteren):
Andere "zusätzliche" Spalten werden immer noch willkürlich gewählt, während die Sortierreihenfolge nicht deterministisch ist.
Kreuztabellengrundlagen: