问题:
#表名为tt的表内容如下
Year month value
2009 1 1.1
2009 2 1.2
2009 3 1.3
2009 4 1.4
2010 1 2.1
2010 2 2.2
2010 3 2.3
2010 4 2.4
#要求查询结果为year m1 m2 m3 m4  
2009 1.1 1.2 1.3 1.4
2010 2.1 2.2 2.3 2.4答案:
select year,max(if(month='1',value,0)) m1
,max(if(month='2',value,0)) m2
,max(if(month='3',value,0)) m3
,max(if(month='4',value,0)) m4
from tt
group by year;求解答案sql的执行过程,越详细越好,不论对错,答者有分

解决方案 »

  1.   

    建议你先自己试着解释一下这个SQL语句,否则别人也根本不知道你目前已经懂了什么,到什么层次,到底是哪儿不懂。写出你自己的理解,然后让别人来看你的理解是否正确。 否则别人解释过简单你还是理解不了,解释得过细,可能又是根本不必要。
      

  2.   

    max(if(month='2',value,0)) m2
    MYSQL对每行记录判断 month='2',,如果等,则返回 ,value 值,如果不等则返回0 ,然后对所有相同 year 的记录取最大的 value 值
      

  3.   

    select year,max(if(month='1',value,0)) m1
    ,max(if(month='2',value,0)) m2
    ,max(if(month='3',value,0)) m3
    ,max(if(month='4',value,0)) m4
    from tt
    group by year;->
    select year,if(month='1',value,0) m1
    ,if(month='2',value,0) m2
    ,if(month='3',value,0) m3
    ,if(month='4',value,0) m4
    from tt;
    看看结果
    交叉表查询,if(month='2',value,0),如果month='2'则取value否则为0
      

  4.   

    mysql> select year,if(month='1',value,0) m1
        -> ,if(month='2',value,0) m2
        -> ,if(month='3',value,0) m3
        -> ,if(month='4',value,0) m4
        -> from tt;
    +------+------+------+------+------+
    | year | m1   | m2   | m3   | m4   |
    +------+------+------+------+------+
    | 2009 | 1.1  | 0    | 0    | 0    |
    | 2009 | 0    | 1.2  | 0    | 0    |
    | 2009 | 0    | 0    | 1.3  | 0    |
    | 2009 | 0    | 0    | 0    | 1.4  |
    | 2010 | 2.1  | 0    | 0    | 0    |
    | 2010 | 0    | 2.2  | 0    | 0    |
    | 2010 | 0    | 0    | 2.3  | 0    |
    | 2010 | 0    | 0    | 0    | 2.4  |
    +------+------+------+------+------+
    8 rows in set (0.00 sec)
    知道为什么要用MAX了吧
      

  5.   

    select year
    ,(if(month='1',value,0)) m1
    ,(if(month='2',value,0)) m2
    ,(if(month='3',value,0)) m3
    ,(if(month='4',value,0)) m4
    from tt
    group by year;
    的结果是的结果是+------+------+------+------+------+
    | year | m1   | m2   | m3   | m4   |
    +------+------+------+------+------+
    | 2009 |  1.1 |  0.0 |  0.0 |  0.0 |
    | 2010 |  2.1 |  0.0 |  0.0 |  0.0 |
    +------+------+------+------+------+
    2 rows in set (0.00 sec)我的理解:sum函数的一般作用是求出指定列的和,在这里sum起到的作用是什么呢?是不是每一个sum的执行都会遍历这张表的所有行? 谁能帮我解释下sum函数的执行过程?