0

空のテーブルからSELECTしたときにSQLSELECTクエリが行を返さない理由を知っている人はいますが、空のテーブルの列からAVGをSELECTしようとすると、<null>が返されますか?振る舞いの違いは私には奇妙に思えます。それが何か違いを生むなら、私はsqliteデータベースを使用しています。

2つのクエリは次のとおりです。

通常の選択:FROMテーブル1を選択します。
テーブル1が空の場合、行が返されません。

平均選択:SELECT AVG(a)FROM table1
table1が空の場合、<null>行が返されます。

4

4 に答える 4

4

ANSI 92 仕様から

b) AVG、MAX、MIN、または SUM が指定されている場合、

          Case:

          i) If TXA is empty, then the result is the null value.

詳細については、http: //www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txtをご覧ください。

于 2009-07-14T00:18:08.487 に答える
3

私は肯定的ではありませんが、平均を決定するには、行数で割る必要があります。行数がゼロの場合、それによる除算は未定義になります。したがって、NULL が返されます。推測です。

于 2009-07-14T00:10:53.653 に答える
1

集計を行っています。集計は 0 ~ n 行に対して定義されるため (この場合、0 行は null になります)、常に 1 つの結果が返されます (この場合は正確に 1 つ)。

別の言い方をすれば、テーブルから行を求めているのではなく、テーブル内の 1 つの列の平均を求めていて、それが返されているのです。この場合、1 行以外のものを取得するのは奇妙です。

集計されていない列も要求した場合、たとえば

SELECT Salesperson, AVG(Sale)
FROM Sales
GROUP BY Salesperson

非集計選択を満たすものがないため、行が返されないことが期待されます。

于 2009-07-14T00:13:59.203 に答える
-1

AVG は COUNT に似た集計関数です。もしあなたがそうするなら:

SELECT COUNT(a) FROM table1 は、ゼロ行を取得すると予想されます。

AVG、SUM などと同じです。集計関数の結果を含む 1 つの行を取得します。

于 2009-07-14T00:19:37.397 に答える