各ユーザーの最大の group_id を個別の値としてカウントします。
P粉237125700
P粉237125700 2024-01-16 17:59:12
0
1
373

私の最新のプロジェクトには (少なくとも私にとっては) トリッキーなロジックがあり、それを解決するために HAVING を使用しようとしていますが、すべてのプレイで間違った結果が得られます。

ユーザーをユーザー グループに割り当てるリンク テーブルと、各グループのユーザー数を記録する別のテーブルがあるため、常にカウントする必要はありません (2 番目のテーブルは、ユーザー登録が時間から更新された後に実行されます)時間に)。

私が抱えている問題は、2 番目のテーブルの数値を更新する関数にあります。

リンクされたテーブルは次のようになります。これが私の問題を説明するサンプル データです:

リーリー

ユーザーは任意の数のグループに所属できます。実際、グループになるには、ユーザーはその下のすべてのグループに所属する必要があります。これは、各グループに特定の権限が割り当てられているためです。これを変更するには、現在のアプリケーションを大幅に書き直す必要があります。

私がやりたいのは、各ユーザーの最上位グループのみをカウントすることです。そのため、上記のデータ例では、ユーザー 1 はグループ 5 でのみカウントされ、グループ 1 は空のように見えます。

現在、すべてのエントリがカウントされます。つまり、グループ 4 に 3 人のユーザーがいる場合、その 3 人のユーザーはグループ 3、2、および 1 にもカウントされるため、私の数字は比較的無意味になります。

これまでに、いくつかのバリエーションを試してみました:

リーリー

これで同じ番号が得られます。それから私は試しました:

リーリー

しかし、今では理解していますが、私は他のグループに属していないユーザーにのみ質問しています。

正しい方向に進んでいるように感じますが、どこにどのような条件を設定すればよいのかわかりません。同様のフローのクエリの例をいくつか見てきましたが、エイリアスがすべて混乱を招くだけです。

誰かが私に正しい方向を教えてくれませんか?

P粉237125700
P粉237125700

全員に返信(1)
P粉431220279

集計を使用して各ユーザーの最大 group_id を取得し、COUNT() ウィンドウ関数を使用して、返された各ユーザーの最大 group_id> 数をカウントできます。 :

リーリー

このクエリは、メンバーを持たないすべての group_id をフィルターで除外します。

すべての group_id の結果が必要な場合は、テーブル groupsLEFT を使用して上記のクエリに接続します。 リーリー

簡略化された

デモをご覧ください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート