問題タブ [grouping-sets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 複数の GROUP BY による全体の要約
census
次の情報で呼び出されるテーブルがあるとしましょう。
国/州レベルでレポートを作成しています。これにより、次のことがわかります。
最終結果が次のようになるように、レポートに「全体的な要約」行を含めたいと考えています。
私はROLLUP
s に精通していますが、私が探しているものを得る組み合わせを見つけることができないようです. 使用GROUP BY ROLLUP(country, province)
には、必要な合計値が含まれますが、気にしない多数の余分な値も含まれます。これは、GROUP BY ROLLUP(country), province
「合計」の記録を作成するにはどうすればよいですか?
現在、 で計算しUNION ALL
、最初のクエリの 90% を別の で繰り返していGROUP BY
ますが、最初のクエリは自明ではないため、結果は遅くて醜いコードになります。
これで遊んでみたい人のための SQL Fiddle があります: http://sqlfiddle.com/#!4/12ad9/5
sql-server - 1 回のスキャンでのデータ行と合計行
テーブルに次のデータがあるとします。
最後に合計行を追加する必要があります (SUM
ボリュームとNULL
残りの列)。
私が必要とすることは、合計を次のunion all
ように追加することで達成できることを知っています:
ただし、この方法ではテーブルが 2 回スキャンされます。
データを 2 回スキャンするのを避けるために、group by
以下を使用してみました。
この方法では、テーブル スキャンは 1 つしかなく、サンプル データの最初の 2 つの行 (重複) が 1 つにマージされ、重複を別の行として保持する必要があることを除いて、必要なものはほとんど得られます。
質問: テーブル データが 1 回スキャンされ、重複が別の行として保持されるように、合計行が追加されたテーブル データを取得することは可能ですか?
望ましい結果は、union all
クエリによって返されるものです。
group by grouping sets
クエリによって返される結果:
sql-server-2005 - 「SETS」付近の構文が正しくありません。- SQL Server 2005
私のコード:
これらの 3 つのフィールドと他の 2 つのフィールドが繰り返されるため、これを行っています。
w.[P2010]
wug郡
一部の wmsProjectNameSWP で異なります
wmsSponsorEntityName | wmsSponsorEntityPrimaryRegion | wmsProjectNameSWP | wugCounty| P2010
アバナシー | お | 地域の地下水開発 | ラボック | 808
アバナシー | お | 地域の地下水開発 | ヘイル | 2297
しかし、「SETS」の近くで構文が正しくないというエラーが表示されます。
任意のガイダンスをいただければ幸いです。
sql - グループ化は、集計引数と NULL 置換で列を設定します
以下の例のクエリ Q1 のように、インターネット上には多くのグループ化セットの例があります。ただし、A2 はグループ化列であり、SUM() の引数として使用されるため、クエリ Q2 は異なります。
SQL 標準 (任意のバージョン) に従って、第 2 四半期について正しいものはどれですか?2003年以降グループ化セットをサポートする)? (1)が正しい場合、基準を参照して理由を説明してください。
A2 は、集計の引数に含まれていない限り、NULL に置き換えられます。この解釈により、以下の結果 R1 が得られます。これは Oracle の動作です (こちらの方が便利なようです)。
A2 は、集計で使用されている場所を含めて NULL に置き換えられます。これは、集計が NULL を返すことを意味します。この解釈により、以下の結果 R2 が得られます。これが私がSQL標準を理解している方法です(おそらく間違っています)。
コード例:
これは、SQL 2003 7.9 構文 17 で認識されており、列が NULL に置き換えられる方法が記述されています。ただし、集約への引数を除外する他の場所でのルールを見逃したり、誤解したりする可能性があります。
sql - SQLストアドプロシージャ - where句を使用したグループ化セットは可能ですか?
Grouping Sets
以前、列内のすべてを合計して総計を得るために使用しました。
しかし、WHERE CLAUSE
含まれている列を合計する方法が見つかりませんでした。実際にこれを行う方法があるかどうか疑問に思っていましたGrouping Sets
。
アップデート
以下は、基本的なクエリの例ですDeleted = 0
。削除されたトランザクションをGrand Totalに含めたくないためです。しかし、削除されたトランザクションが結果に表示されるようにしたいのです。
sql - グループ化セットを使用して総計を取得する
SQL SERVER 2005 を SQL SERVER 2014 に移行していて、この問題に遭遇しました。STORED PROCEDURE
レポート Web サイトのレポート クエリをオンザフライで作成する "検索エンジン"があります。古いバージョンでは、COMPUTE BY
小計と総計を取得していました。COMPUTE BY
は SQL SERVER 2014 でサポートされなくなり、使用に切り替えましたGROUPING SETS
。ただし、問題があります。レポートには複数のページを含めることができます。それらは 200 ページを超えることができます。最後のページに総計のみを表示したい。デフォルトでは、すべてのページで 1000 レコードが取得されます。最後のページには通常、残りのレコードとレコード セット全体の総計が表示されます。でそれを達成できましたCOMPUTE BY
。とGROUPING SETS
、 私はできません。レコードセット全体ではなく、最後のページの総計のみを計算できます。任意の提案をいただければ幸いです。ありがとう。
sql - SQL GROUPING SETS は、複数の多対多ディメンションで平均します
次のデータのテーブルがあります。
GROUPING SETS (Platform,Dt,(Platform,Dt),()) 集計を実行して、Platform と Dt の各組み合わせについて次を見つけられるようにしたいと考えています。
- 総購入数
- ユニーク ユーザーの総数
- 1 ユーザーあたりの 1 日あたりの平均購入数
最初の 2 つは単純で、それぞれ sum(Total_Purchases) と count(distinct user) を介して達成できます。
私が抱えている問題は、最後のメトリックにあります。結果セットは次のようになりますが、最後の列を正しく計算する方法がわかりません。
最初の 10 行については、これらの行のディメンションが単一の日付のみを表しているため、1 日あたりのユーザーごとの平均購入を取得することは、最初の 2 つの列の単純な除算であることがわかります。しかし、最後の 3 行を見ると、除算は目的の結果を達成する方法ではないことがわかります。これは、1 日あたりの総量を取得するために、1 日ごとに平均を取る必要があるためです。
これが明確でない場合はお知らせください。より詳しく説明させていただきます。これは、このサイトでの私の最初の投稿です!