ホームページ > データベース > mysql チュートリアル > SQL Server のパーティション内の個別の値をカウントするにはどうすればよいですか?

SQL Server のパーティション内の個別の値をカウントするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-04 14:13:40
オリジナル
857 人が閲覧しました

How Can I Count Distinct Values Within Partitions in SQL Server?

COUNT() OVER を使用したパーティションにわたる個別の値のカウント

COUNT() OVER パーティション関数を使用する場合に個別の値をカウントするという課題を克服するこれは SQL Server でよくある問題です。この記事では、dense_rank() と算術演算の組み合わせを使用して、目的の結果を達成する別のアプローチを検討します。

元のクエリとエラー

元のクエリは計算を試みますCOUNT(DISTINCT) OVER を使用した個別の値の累計:

NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])
ログイン後にコピー

ただし、SQL 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
ログイン後にコピー

この式は、各月内の個別の値の累計。その仕組みは次のとおりです:

  • 最初の項、dense_rank() over ([UserAccountKey] による [Mth] 順序で分割) は、各月内の [UserAccountKey] の各値にランクを割り当てます。 1.
  • 第 2 項、dense_rank() より ([UserAccountKey] による [Mth] 順序で分割) desc)、値を逆の順序でランク付けします。これも 1 から始まります。
  • 最初の項から 2 番目の項を減算すると、重複する値の場合は 0 の結果が生成され、一意の値の場合は最初に出現したランクが生成されます。

以上がSQL Server のパーティション内の個別の値をカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート