我正在研究我公司的生产数据库。我遇到过一种情况。这是我生成的示例数据。实际数据只是相似的,只是更改了字段名。
我的表结构与此类似,

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是相同的,那么将他们视为一个学生。
所以,从上面的例子来看,studentid333555和777拥有相同的facebook电子邮件id。所以,当我计算学生数量时,即使gmail帐户不同,我也只能将这两个学生id视为1。所以,即使一个登录详细信息是相同的,对于2个人,我也只想将这2个人视为1个人。在生产数据中,也有这样的数据,我不得不考虑4-5个人作为一个人只基于他们的登录详细信息。
所以,对于上面的示例表,我需要生成一个查询,返回学生总数为3。(不是5)。
不同的学生证将是(333555777)、444和666

最佳答案

一些查询(如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;

10-01 20:22