计算表中的组,但如果2组中的任何记录相同,则将其视为仅一个组

时间:2017-04-14 12:59:20

标签: mysql select count self-join

我在组织中的生产数据库上工作。我遇到过一个场景。这是我生成的示例数据。实际数据仅类似,只需更改字段名称即可。 我的表结构与此类似,

JSONOArray jsonArray = null;
try{
       jsonArray = new JSONArray(result);
       for(int i=0;i<jsonArray.length;i++){
       JSONObject jsonObject=jsonArray[i];
       receivedCount=jsonObject.getInt("CurrentCount");
       }
   }catch(JSONException e) {
       e.printStackTrace();
   }

我想算一下学生总数(非常简单)。但在这里,我的要求是如果对于2名学生,loginDetail是相同的,那么将他们视为一名学生。

因此,从上面的示例中,StudentId 333,555和777具有相同的Facebook电子邮件ID。因此,当我计算学生人数时,即使gmail帐户不同,我也必须将这两个学生ID视为1。因此,即使一个登录详细信息相同,对于2个人,我也只想将这2个人视为1个人。在生产数据中,还有这样的数据,我必须根据他们的登录详细信息将4-5人ID视为一个人。

因此,对于上面的示例表,我需要生成查询,该查询返回学生总数为3.(不是5)。 不同的学生ID将是(333,555,777),444和666

1 个答案:

答案 0 :(得分: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;