SELECT 1
を実行すると、ハードコードされた値1が抽出されますが、最初の列は予測されません。あなたのクエリは
SQL> SELECT 1
2 FROM (SELECT '0' AS R FROM DUAL
3 UNION
4 SELECT '1' AS R FROM DUAL
5 );
1
----------
1
1
です。これらの行のSUM
は2与える:
SQL> SELECT SUM(1)
2 FROM (SELECT '0' AS R FROM DUAL
3 UNION
4 SELECT '1' AS R FROM DUAL
5 );
SUM(1)
----------
2
たとえば、あなたはこれがselect 100
は、内部クエリの100回目のコラムを探していないことを明確に
SQL> select 100
2 from (select 1 from dual);
100
----------
100
試すことができますが、単純に値を与える100
R
の変数値を抽出しています(文字列を数値に編集しました)。
SQL> SELECT R
2 FROM (SELECT 0 AS R FROM DUAL
3 UNION
4 SELECT 1 AS R FROM DUAL
5 );
R
----------
0
1
これら2つの値の合計が0 + 1 = 1
です:
SQL> SELECT SUM(R)
2 FROM (SELECT 0 AS R FROM DUAL
3 UNION
4 SELECT 1 AS R FROM DUAL
5 );
SUM(R)
----------
1
SQL>
OracleまたはMySQLのクエリでは、あなたは
R
は、行の0、他方では1で、次のような2つの行を、持っています? – Aleksej意味のあるタイトルを使用してください – HoneyBadger
2番目の問合せが期待通りの結果を得た場合、Oracleは間違った期待を持っていると教えてくれました。文字列を追加するので、2番目のクエリがエラーをスローするようにする必要があります。残念ながら、オラクルは警告なしに「心を読んで」文字列を数字に変換するという悪い習慣を持っています。このような習慣を忘れるために、あなたにはうってつけのサービスがあります。 – mathguy