extra1, extra2, ...
jsou "sloupky navíc" v terminologii křížových tabulek.
Příručka pro modul tablefunc
vysvětluje pravidla:
A dále:
Odvážný důraz na klíčové části mnou.
Třídíte pouze podle row_name
:
ORDER BY row_name ASC
V prvním příkladu nezáleží na tom, kde filtrujete pomocí:
WHERE ... t.extra1 = 'val1' -- single quotes by me
Všechny vstupní řádky mají extra1 = 'val1'
tak jako tak. Ale záleží na druhém příkladu, kde filtrujete pomocí:
WHERE ... t.extra1 IN('val1', ...) --> More values
Nyní je porušen první výše uvedený požadavek tučně pro další sloupec extra1
. Zatímco pořadí řazení prvního vstupního dotazu je nedeterministické, výsledné hodnoty pro sloupec "extra" extra1
jsou vybírány libovolně. Čím více možných hodnot pro extra1
, méně řádků bude mít 'val1':to jste si všimli.
Stále to může fungovat:nahlásit extra1 = 'val1'
pro každý row_name
který má alespoň jeden z nich, změňte ORDER BY
komu:
ORDER BY row_name, (extra1 <> 'val1')
Seřadí 'val1' nahoru. Vysvětlení pro tento boolean
výraz (s odkazy na další):
Ostatní „extra“ sloupce jsou stále vybírány libovolně, zatímco pořadí řazení není deterministické.
Základy křížové tabulky: