ホームページ >データベース >mysql チュートリアル >DISTINCT を使用せずに SQL Server のパーティション内の個別の数を計算する方法
パーティション関数を使用した個別のカウントの計算
SQL Server では、COUNT() OVER 関数を使用して、指定したパーティション内のデータを集計できます。ただし、パーティション関数内での DISTINCT キーワードの使用はサポートされていません。このため、開発者はパーティション内の個別のカウントを取得する方法を疑問に思うことになります。
DENSE_RANK の使用
個別のカウントを計算するための簡単な解決策は、DENSE_RANK 関数を利用することです。次のクエリは、
DENSE_RANK() OVER (PARTITION BY [Mth] ORDER BY [UserAccountKey]) + DENSE_RANK() OVER (PARTITION BY [Mth] ORDER BY [UserAccountKey] DESC) - 1
この式は、各月内の個別の UserAccountKey の数を計算します。これは、まず各月内で UserAccountKeys を昇順と降順でランク付けすることによって行われます。次に、これらのランキングが加算され、1 が減算されて、必要な数が得られます。
例
次のデータを考えてみましょう。
| Mth | UserAccountKey | |---|---| | 1 | A | | 1 | B | | 1 | C | | 2 | D | | 2 | E | | 2 | F |
使用上記の式を使用すると、クエリは次の値を返します。 results:
| Mth | NumUsers | |---|---| | 1 | 3 | | 2 | 3 |
結論
DENSE_RANK 関数は、DISTINCT キーワードが指定されていない場合でも、SQL Server のパーティション内の個別のカウントを計算するための簡潔で効率的な方法を提供します。 PARTITION BY 句で直接サポートされています。
以上がDISTINCT を使用せずに SQL Server のパーティション内の個別の数を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。