extra1, extra2, ...
「追加の列」です クロス集計用語で。
そしてさらに下へ:
私は重要な部分を大胆に強調しています。
row_name
でのみ並べ替えます :
ORDER BY row_name ASC
次のようにフィルタリングする最初の例では重要ではありません:
WHERE ... t.extra1 = 'val1' -- single quotes by me
すべての入力行にはextra1 = 'val1'
があります とりあえず。ただし、次のようにフィルタリングする2番目の例では重要です。
WHERE ... t.extra1 IN('val1', ...) --> More values
現在、上記の最初の太字の要件は、追加の列extra1
で違反しています。 。最初の入力クエリの並べ替え順序は非決定論的ですが、「extra」列の結果の値はextra1
任意に選択されます。 extra1
のより多くの可能な値 、行が少なくなると「val1」になります。これが観察されたものです。
あなたはまだそれを機能させることができます:extra1 = 'val1'
を報告する すべてのrow_name
に対して それらの少なくとも1つがある場合は、ORDER BY
を変更します 宛先:
ORDER BY row_name, (extra1 <> 'val1')
'val1'を上にソートします。そのboolean
の説明 式(詳細へのリンク付き):
他の「余分な」列は、並べ替え順序が決定論的ではない場合でも、任意に選択されます。
クロス集計の基本: