【问题标题】:How to get grouped columns count by value如何按值获取分组列计数
【发布时间】:2019-11-15 09:32:50
【问题描述】:

你好,我有一张表,其中一列 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

【问题讨论】:

    标签: mysql sql group-by sum pivot


    【解决方案1】:

    您可以使用条件聚合:

    select 
        studentid,
        sum(jtypeid = 12) exam,
        sum(jtypeid = 14) activity
    from lms_journal
    group by studentid
    

    表达式sum(jtypeid = <n>)利用了这样一个事实,即在MySQL中,在数字上下文中,真条件被评估为1,而假条件被评估为0。这使得查询更短,并且在某种程度上更具可读性(如果你知道诀窍的话)。

    【讨论】:

      【解决方案2】:

      你可以试试条件聚合

      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
      

      【讨论】:

        猜你喜欢
        • 2021-10-30
        • 2022-11-03
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        相关资源
        最近更新 更多