0

これはばかげているように聞こえるかもしれませんが、集計関数が返されるレコードを1に制限する理由はわかりません。実際的な理由よりも、これは知っているだけです。

id
1 
2
3
4

SELECT id FROM table

id
1 
2
3
4

私がやればSELECT id, id, 1 AS p FROM tableそれは与える

id    id p
1     1  1
2     2  1
3     3  1
4     4  1

SELECT id, MAX(2) AS p FROM tableだから次に私は収量を仮定します

id   p
1    2
2    2
3    2
4    2

しかし、これは実際には次のようになります。

id   p
1    2

1)なぜこれが集計関数で発生し、期待した結果が得られないのですか?

2)これはMySQLとSQLiteで見つかりました。すべてのデータベースは同じように応答しますか?

3)好奇心から、次のようなビューを取得するためにクエリを実行するにはどうすればよいですか。

id   max(id)
1    4
2    4
3    4
4    4
4

2 に答える 2

1

1)に対する標準的な答えは、次のとおりです。これは、集約group byされ、定義され、機能するために必要な方法です。

re 3)ほとんどの最新のDBMS(MySQLとSQLiteではない)では、これを行うことができます:

select id, 
       max(id) over ()
from your_table;

そしてそれはあなたが期待したものを正確に返すでしょう。

MySQLで必要なものを取得するには、副選択を使用する必要があります。

select id, 
       (select max(id) from your_table)
from your_table;
于 2012-05-04T23:50:19.617 に答える
1

1)IDが集計関数に含まれていないため、この式を実行できません。集計関数は、選択範囲内の唯一の列である場合にのみ使用できます。これは、単一の値を返し、他の列はほとんどの場合複数の行を返すためです。

2)Accessでこれを試しましたが、エラーが発生しました。(IDは集計関数にありません...)。私はまだ他のデータベースシステムでこれを試していません。

3)ステートメントの最後にGROUP BY IDを追加すると、結果を取得できます。これは、IDのすべてのインスタンスで集計関数の各結果を使用することをシステムに通知します。これにより、集計関数の外部でIDを使用できるようになります。

于 2012-05-04T23:59:22.160 に答える