2017-04-14 9 views
1

私は組織内の運用データベースをワーキングしています。私は1つのシナリオに遭遇しました。ここに私が生成したサンプルデータがあります。実際のデータは似ているだけで、フィールド名を変更しました。 私のテーブル構造は、テーブル内のグループをカウントしますが、2つのグループのレコードが同じであれば、それを1つのグループとみなしてください。

tableAi - unsigned bigint(20) - Auto increment index 
loginDetails - varchar(200)  
loginType - tinyint(4) (2- gmail, 3 facebook) 
studentid - unsigned bigint(20) 

tableAi | loginDetails | loginType | studentId 
1 | [email protected] | 2 | 333 
2 | [email protected] | 3 | 333 
3 | [email protected] | 3 | 444 
4 | [email protected] | 2 | 444 
5 | [email protected] | 2 | 555 
6 | [email protected] | 3 | 555 
7 | [email protected] | 3 | 666 
8 | [email protected] | 2 | 777 
9 | [email protected] | 3 | 777 

これに似ている私は、学生の総数(つまりは非常に簡単です)カウントします。しかし、ここで私の要件はloginDetailが2人の学生のために同じである場合です。

したがって、上の例のStudentId 333,555,777は同じfacebookのメールIDを持っています。だから、私が学生数を数えると、gmailアカウントが異なっていても、これらの2人の学生IDは1だけとみなされなければならない。だから、1人のログイン詳細が同じであっても、2人であれば、その2人を1人だけとして扱いたい。プロダクションデータでは、ログインの詳細のみに基づいて1人として4-5人の人のIDを考慮する必要があるというデータもあります。

上記のサンプルテーブルでは、生徒の総数を3(5ではない)に戻すクエリを生成する必要があります。 Idsはなり 明確な学生(333555777)、444および666

答えて

1

TISのようないくつかのクエリでは、あなたの出力が得られます:

SELECT 
count(*), -- only for test 
GROUP_COUNCAT(t.studentId) AS stundents, 
t.loginDetails, 
MAX(t.loginType) as loginType, 
t.studentId 
FROM tableAi t 
GROUP BY t.loginDetails 
HAVING count(*) = 2; 
+0

感謝を。連結されたグループのみがカウントされます。だから、私のデータは 1 | [email protected] | 2 | 333 2 | [email protected] | 3 | 333 3 | [email protected] | 3 | 444 4 | [email protected] | 2 | 444 5 | [email protected] | 2 | 555 6 | [email protected] | 3 | 555 7 | [email protected] | 2 | 666 8 | [email protected] | 3 |それから2を返すだけです。理想的にはそれは3を返すべきです。 – user3462649

+1

私は私の答えを変えました。それを確認してください –

+0

あなたの助けをたくさんありがとう。しかし、私は上記のシナリオを考慮すれば、グループの連結合計を計算しますが、値が異なる行が1つしかないと言うことができます。それで、それはそれをカバーしません。 – user3462649

関連する問題