【问题标题】:Mysql Pivot Table with where clause带有where子句的M​​ysql数据透视表
【发布时间】:2012-08-07 09:28:31
【问题描述】:
select student_id, class_id, section_id, exam_date, exam_id, 
       sum(number*(1-abs(sign(subject-1)))) as sub1, 
       sum(number*(1-abs(sign(subject-2)))) as sub2, 
       sum(number*(1-abs(sign(subject-3)))) as sub3, 
       sum(number*(1-abs(sign(subject-4)))) as sub4, 
       sum(number*(1-abs(sign(subject-5)))) as sub5, 
       sum(number*(1-abs(sign(subject-6)))) as sub6 
from result 
where class_id = '7' and section id = '3' and YEAR(exam_date) = '2012' and exam_id = '3'
GROUP BY student_id

我有一个问题,当我使用 where 子句过滤时,所有数值都为 0,如果我在没有 where 子句的情况下运行查询,结果会很好,但来自所有数据库。 如何使用 where 子句过滤查询? 谁能帮帮我?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    你也需要按 class_id 分组

    SELECT * FROM ( 
    select student_id, class_id,  
           sum(number*(1-abs(sign(subject-1)))) as sub1,  
           sum(number*(1-abs(sign(subject-2)))) as sub2,  
           sum(number*(1-abs(sign(subject-3)))) as sub3,  
           sum(number*(1-abs(sign(subject-4)))) as sub4,  
           sum(number*(1-abs(sign(subject-5)))) as sub5,  
           sum(number*(1-abs(sign(subject-6)))) as sub6  
    from result GROUP BY student_id,class_id) m 
    where class_id = '7'
    

    【讨论】:

      【解决方案2】:

      在 where 之前包装查询。

      SELECT * FROM (
      select student_id, class_id, 
             sum(number*(1-abs(sign(subject-1)))) as sub1, 
             sum(number*(1-abs(sign(subject-2)))) as sub2, 
             sum(number*(1-abs(sign(subject-3)))) as sub3, 
             sum(number*(1-abs(sign(subject-4)))) as sub4, 
             sum(number*(1-abs(sign(subject-5)))) as sub5, 
             sum(number*(1-abs(sign(subject-6)))) as sub6 
      from result GROUP BY student_id) m
      where class_id = '7' 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-30
        • 1970-01-01
        • 2015-11-20
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多