2つのアプリケーションのうち1つで非アクティブなユーザーの数を数えようとしています。2つのテーブルの左結合でユーザーをカウントするSQLクエリ
私は2つのテーブル - Users
テーブルとUser_Applications
テーブルを持っています。このテーブルには、ユーザID、アプリケーションID、およびブール値を含む行があり、それらがアクティブでも非アクティブでもあります。
ユーザがアプリケーションにアクセス権を与えられている場合、行がUser_Applicationsに追加されます。したがって、App AとApp Bにアクセス権が与えられている場合、2行あります。 App Aのみにアクセス権が与えられている場合は、1行しかありません。
App Bに関してUser_Applications
にレコードが存在しない場合、ユーザーは非アクティブです。レコードがUser_Applicationsでユーザーのために全く存在しない場合、彼らはこのように参加想像し、両方のアプリケーションAおよびアプリケーションB.
で不活性である:
| user_id | app_id | active |
|---------|--------|--------|
| 1 | 'A' | false |
| 1 | 'B' | true |
| 2 | null | null |
| 3 | 'B' | true |
私は、ユーザーの数をカウントしていた場合、誰がAで非アクティブである場合、ユーザー1、ユーザー2、およびユーザー3はすべて非アクティブです。しかし、私のSQLスクリプトは、1と2のようなユーザーしかカウントしません.3のようなユーザーはカウントされません。
私は、App Aにおける非アクティブなユーザーの数をカウントするために、このSQLスクリプトを書いた:
SELECT COUNT(*) FROM Users u
LEFT JOIN User_Applications s on u.user_id = s.user_id
WHERE (s.app_id = 'A' OR s.app_id IS NULL)
AND (s.active = false OR s.active IS NULL);
は<= '1 https://stackoverflow.com/questions/4970314/can 'をチェックする必要があります-count-ever-return-null –