Mysql 如何按值获取分组列计数

Mysql 如何按值获取分组列计数,mysql,sql,group-by,sum,pivot,Mysql,Sql,Group By,Sum,Pivot,您好,我的表中有一列jtypeid(14是活动,12是考试)和studentid 我想把活动数和考试数作为列。我的问题是 SELECT name,surname, count(jtypeid) as activity FROM lms_journal INNER JOIN lms_student ON lms_student.id = lms_journal.studentid WHERE lms_journal.jtypeid=14 GROUP BY studen

您好,我的表中有一列jtypeid(14是活动,12是考试)和studentid

我想把活动数和考试数作为列。我的问题是

SELECT name,surname, count(jtypeid) as activity 
FROM lms_journal INNER JOIN 
     lms_student 
     ON lms_student.id = lms_journal.studentid 
WHERE lms_journal.jtypeid=14 
GROUP BY studentid 
UNION 
SELECT name,surname, count(jtypeid) as exam 
FROM lms_journal INNER JOIN 
     lms_student 
     ON lms_student.id = lms_journal.studentid 
WHERE lms_journal.jtypeid=12 
GROUP BY studentid
比如说

id jtypeid studentid
1    14       100
2    14       101
3    12       100
4    12       101
5    14       102
6    14       100
结果应该是:

studentid exam activity
100       1       2
101       1       1
102       0       1

您可以尝试使用条件聚合

select studentid, 
       count(case when jtypeid=12 then 1 end) as exam,
       count(case when jtypeid=14 then 1 end) as activity
from tablename
group by studentid

您可以使用条件聚合:

select 
    studentid,
    sum(jtypeid = 12) exam,
    sum(jtypeid = 14) activity
from lms_journal
group by studentid
表达式
sum(jtypeid=)
利用了这样一个事实:在MySQL中,真实条件在数值上下文中被计算为
1
,而虚假条件被计算为
0
。这使得查询更短,而且更具可读性(如果您知道诀窍的话)