ホームページ >データベース >mysql チュートリアル >DISTINCT を使用せずに SQL Server のパーティション内の個別の数を計算する方法

DISTINCT を使用せずに SQL Server のパーティション内の個別の数を計算する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 19:06:40814ブラウズ

How to Calculate Distinct Counts Within Partitions in SQL Server Without Using DISTINCT?

パーティション関数を使用した個別のカウントの計算

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。