问题:
#表名为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的执行过程,越详细越好,不论对错,答者有分
#表名为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的执行过程,越详细越好,不论对错,答者有分
MYSQL对每行记录判断 month='2',,如果等,则返回 ,value 值,如果不等则返回0 ,然后对所有相同 year 的记录取最大的 value 值
,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
-> ,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了吧
,(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函数的执行过程?