mysql根据列计算匹配数

时间:2017-06-07 23:04:37

标签: mysql

这是我的示例数据集我有分配给他们的学生组,如下所示

uid | groupid         | studentid
49  | PZV7cUZCnLwNkSS | wTsBSkkg4Weo8R3
50  | PZV7cUZCnLwNkSS | aIuDhxfChg3enCf
97  | CwvkffFcBCRbzdw | hEwLxJmnJmZFAic
99  | CwvkffFcBCRbzdw | OKFfl58XVQMrAyC
126 | CwvkffFcBCRbzdw | dlH8udyTjNV3nXM
142 | 2vu1eqTCWVjgE58 | Q01Iz3lC2uUMBSB
143 | 2vu1eqTCWVjgE58 | vB5s8hfTaVtx3wO
144 | 2vu1eqTCWVjgE58 | 5O9HA5Z7wVhgi6l
145 | 2vu1eqTCWVjgE58 | OiEUOXNjK2D2s8F

我正在尝试输出以下信息。 我遇到的问题是Group Size列让它输出一个计数。

Studentid       | Groupid         | Group Size
wTsBSkkg4Weo8R3 | PZV7cUZCnLwNkSS | 2
aIuDhxfChg3enCf | PZV7cUZCnLwNkSS | 2
hEwLxJmnJmZFAic | CwvkffFcBCRbzdw | 3
OKFfl58XVQMrAyC | CwvkffFcBCRbzdw | 3
dlH8udyTjNV3nXM | CwvkffFcBCRbzdw | 3

我已经研究过,如果我可以在计数中使用where子句,并且似乎不会让我这样做。我想过做一笔钱,但也无法做到这一点。我觉得我错过了一些简单的事情。

4 个答案:

答案 0 :(得分:1)

解决此问题的一种简单方法是使用JOIN语句:

SELECT a.studentid AS Studentid, a.groupid AS Groupid, COUNT(*)
FROM table AS a
     JOIN table AS b ON a.groupid = b.groupid
GROUP BY a.studentid, a.groupid

所以我们在这里加入table并使用GROUP BYstudentidgroupid进行分组,然后使用COUNT(*)来计算数字b中具有相同groupid的行。

答案 1 :(得分:1)

试试这个:

SELECT *
FROM pony a
LEFT JOIN (
    SELECT COUNT(*), groupid
    FROM pony
    GROUP BY groupid
) b ON a.groupid = b.groupid

答案 2 :(得分:1)

试试这个

SELECT T1.Studentid, T1.Groupid, T2.GroupCount
FROM Your_Table T1
INNER JOIN ( SELECT Groupid, count(*) AS GroupCount FROM Your_Table GROUP BY Groupid ) T2
ON T1.Groupid = T2.Groupid

答案 3 :(得分:0)

你应该尝试:

SELECT COUNT(Groupid) AS Groupsize FROM table;

看来你要做的事情很简单。如果我理解正确,可以使用简单的 SELECT COUNT 语句。要排除同一值的多个退货,请使用 SELECT DISTINCT COUNT()