27

SQL Serverでこれができないのはなぜですか:

select  sum(count(id)) as 'count'
from    table

しかし、私はすることができます

select sum(x.count)
from
(
    select  count(id) as 'count'
    from    table   
) x

それらは本質的に同じものではありませんか?コードの最初のブロックが許可されていない理由を理解するために、これについてどのように考えているのでしょうか?

4

7 に答える 7

14

あなたの例の SUM() はノーオペレーションです - COUNT() の SUM() は、単に COUNT() と同じことを意味します。したがって、どちらのクエリ例も役に立たないようです。

集約のネストは、2 つの異なる集約を適用したい場合 (つまり、異なる列セットで GROUP BY を適用する場合) にのみ意味があるように思えます。2 つの異なる集計を指定するには、GROUPING SETS 機能または SUM() OVER 機能を使用する必要があります。達成したいことを説明すれば、誰かがその方法を教えてくれるかもしれません。

于 2012-05-25T06:25:40.503 に答える
8

問題の要点は、リレーションに適用される集計の集計などの概念がないことです。集計を参照してください。このような概念を使用すると、定義に多くの穴が残り、GROUP BY 句を表現できなくなります。内部集計 GROUP BY 句と外部集計の両方を定義する必要があります。これは、HAVING 句などの他の集約属性にも適用されます。

ただし、リレーションに適用された集計の結果は別のリレーションであり、この結果リレーションは新しい集計演算子をサポートできます。これは、結果を外部 SELECT に集約できる理由を説明しています。これにより、定義にあいまいさがなくなり、各 SELECT には独自の GROUP BY/HAVING 句があります。

于 2012-05-28T08:29:34.487 に答える
1

このSQLで期待される結果を知りたい

select  sum(count(id)) as 'count'
from    table

関数を使用するとcount、1 つの結果 (合計カウント) のみが返されます。では、なぜ 1 つの結果だけを合計したいのかお尋ねしてもよろしいでしょうか。

集計関数は集計またはサブクエリを含む式に対して実行できないため、エラーが発生することは間違いありません。

于 2012-05-29T10:57:35.753 に答える
1

SQLFiddleを使用して機能していますが、なぜ機能しないのかわかりません。しかし、なぜそれがうまくいかないのか、そしてなぜ別の方法がうまくいくのかについての説明があります...

あなたの例は、常に機能するとは限らない列名としてキーワードを使用しています。しかし、列がサブ式のみにある場合、クエリ エンジンは自由に名前を破棄できる (実際にはそうする可能性が高い) ため、潜在的にキーワードと競合する可能性があるという事実は無視される可能性があります。

編集: あなたの編集/コメントに応じて。いいえ、この 2 つは同等ではありません。RESULT は同等ですが、その結果に到達するプロセスはまったく似ていません。最初に機能するために、パーサーは単に意味をなさないいくつかの作業を行いました (行ごとに、または as として、単一の値に集計を適用します)。2 番目のケースでは、集計テーブルに適用されます。テーブルが一時的な仮想テーブルであるという事実は、集計関数にとって重要ではありません。

于 2012-05-25T04:19:07.660 に答える
-1

必要な出力の「カウント」行を生成するSQLクエリを作成できると思います。関数は、'sum' や集約サブクエリなどの集約関数を使用しません。私の問題は、単純なSQLクエリを使用してカウントを取得することで解決されました....

于 2014-02-28T16:10:07.623 に答える
-6

Microsoft SQL Server はサポートしていません。

Derivedテーブルを使用すると、この問題を回避できます。

select sum(x.count)
from
(
    select  count(id) as 'count'
    from    table   
) x

一方、以下のコードを使用すると、エラー メッセージが表示されます。

select  sum(count(id)) as 'count'
from    table

集計またはサブクエリを含む式に対して集計関数を実行することはできません

于 2012-05-26T10:49:20.163 に答える