2016-05-29 2 views
1

この質問を受けたのはquestionです。ORDER BYの後に数字

SELECT * 
FROM A 
WHERE x='abc' 
    OR y=0 
order by case when x='abc' then 0 else 1 end; 

このクエリはおそらく、X = 'ABC' の場合の優先順位を決定します。しかし、私は本当になぜこれが起こっている混乱している? ORDER BYの後に列名または列番号が続きますか?また、私はORDER BYの構文について研究しましたが、これについては何も教えていません。また、私はこのような何かをしようとしたが、それは言う:「BY項が範囲外第一ORDER - 1と1の間でなければなりません」:だから

SELECT A 
FROM B 
ORDER BY 2 

、誰でも良いドキュメントには、このクエリまたは少なくともポイントを説明することができますか?どうもありがとうございました。

答えて

2

まあ、ORDER BY句の後に数字が続く場合、この数字は(number)の欄に参照されます。

CASE EXPRESSION続いORDER BYxabcとするとき、そのことは価値1を得るわけではないに等しい場合、各列は、値0を取得する、条件付きの順序と呼ばれています。その後、注文はASCにありますので、0は、1の前に常にprioitizeされます。

それはこのようなものになります。基本的には、新しい値を生成するようなものだ、だから、

x | y | .... | Here is the new value that will order the query 
abc  1    0 
ayr  0    1 
acz  1    1 
......... 

+0

通常の注文と組み合わせることはできますか?また、なぜこのような優れた機能が適切に文書化されていないのでしょうか? –

+0

これは標準的なSQLではないので、順序を欺く方法です。もちろん、これは有効な次の順序です: 'x = 'abc' THEN 0 else 1 END、x DESC、y ASC .... Another_case_if_you_want' @SidGo – sagi

+1

@SidGo - ***は***です。 https://www.sqlite.org/lang_select.html 'The ORDER BY Clause'の中では、ORBER BYの式が'定数の整数 'であれば位置指定*のみ*が機能すると述べています*(関数、フィールド、式ではありません、またはCASEステートメント)*。 – MatBailie

関連する問題