首页 新闻 会员 周边 捐助

mysql的面试题

0
悬赏园豆:100 [已解决问题] 解决于 2016-03-29 14:19

请教各位这个sql语句该怎么写??小弟琢磨了很久,感觉有点绕

这是我写的:

select * from (select year,month,money from order_sum a where exists(select month from order_sum b where b.year=2014 and a.month = b.month group by month)
union ALL
select 2014,month,0.00 from order_sum a where not EXISTS(select month from order_sum b where b.year=2014 and a.month = b.month group by month)) as temp_a
LEFT JOIN
(select year,month,money from order_sum a where exists(select month from order_sum b where b.year=2015 and a.month = b.month group by month)
union ALL
select 2015,month,0.00 from order_sum a where not EXISTS(select month from order_sum b where b.year=2015 and a.month = b.month group by month)) as temp_b on temp_a.month = temp_b.month

请各位大哥指点一下,看看能不能再优化一下,谢谢了

ZengGW的主页 ZengGW | 初学一级 | 园豆:10
提问于:2016-03-29 12:03
< >
分享
最佳答案
0

标准的行列转换。

http://blog.sina.com.cn/s/blog_4586764e0100lzmx.html

 

http://cenalulu.github.io/mysql/column-row-reverse/

收获园豆:60
幻天芒 | 高人七级 |园豆:37207 | 2016-03-29 13:18

谢谢

ZengGW | 园豆:10 (初学一级) | 2016-03-29 13:38
其他回答(2)
0

咕~~(╯﹏╰)b  你可以搜一下 “SQL 行列转换”  好多个例子

收获园豆:40
小刺猬001 | 园豆:660 (小虾三级) | 2016-03-29 13:10

好的,感谢

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 13:37

@思心思危: http://zhidao.baidu.com/link?url=-36B56WWmVPsoV-7T0rdXT9z6Y1V2B7JybJIL3ovlW0K5ALTLON1MDN-gfJJ5WqtSjvqWxIJzXlHKILEDkRGWa

这个分了动态sql和静态sql 。就是列数固定不固定。 我sql也不好,哈哈 共同学习。

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-29 13:39

@思心思危: 楼下那个标准表那个可以用,直接改改列名就可以了。

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-29 13:53

@思心思危: 2.

mysql行转列(综合利用if + sum)-
http://blog.csdn.net/jayxujia123/article/details/21739125

上边那个百度知道动态和静态,结合这个sum if。我学会啦,嘿嘿。

主要确定列名,然后填充数据就行了。 就是动态列名的那个有点麻烦~

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-29 14:21

@小刺猬001: 你太谦虚了,我现在在学习mylsq,但是感觉好多的知识都不知道,我现在在看高性能mysql,像今天遇到的这个问题,还是不怎么会,写了那么一大堆,结果还是达不到效果,要不是你们指点,我估计够呛

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 14:21
0

select Orderstiln.Year AS '年份',
sum(if(Orderstiln.Month=1,Moeny,0)) AS '1月份',
sum(if(Orderstiln.Month=2,Moeny,0)) AS '2月份',
sum(if(Orderstiln.Month=11,Moeny,0)) AS '11月份',
sum(if(Orderstiln.Month=12,Moeny,0)) AS '12月份',
sum(Moeny) AS 总计
from Orderstiln
group by Orderstiln.Year ;

大楚打码人 | 园豆:4313 (老鸟四级) | 2016-03-29 14:19

你来晚了,他刚发完园豆。我竟然还发了40呢~

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-29 14:21

@小刺猬001: 不为豆子而来。豆子那都是浮云。解决问题才是关键!一起学习!

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2016-03-29 14:22

@小刺猬001: 我不怎么会玩博客,刚玩两三天呢!

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 14:24

谢谢,我已经写出来了,真的非常感谢你们

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 14:26

@思心思危: 嗯嗯,解决了就行!与君共勉!哈哈。

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2016-03-29 14:35

@贫民窟大侠: 想问下你们是怎么学习mysql的?能告诉我一些你们学习的资料什么的吗?我感觉我学的东西很基础,一遇到点难的就不会了

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 14:45

@思心思危: 没有刻意的去学呢!估计只有实践才能学到东西。不慌,慢慢来。多动手实践。

支持(1) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2016-03-29 14:50

@贫民窟大侠: 也对,大侠你这发的图片很高大上啊!

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 14:52

@思心思危: 嗯,女神。

支持(0) 反对(0) 大楚打码人 | 园豆:4313 (老鸟四级) | 2016-03-29 14:52

@贫民窟大侠: 啊??你的女神吗?

支持(0) 反对(0) ZengGW | 园豆:10 (初学一级) | 2016-03-29 14:53

@贫民窟大侠: 有豆子才有动力。就像闪存的星星如果没了,我就没动力去了。

支持(0) 反对(0) 小刺猬001 | 园豆:660 (小虾三级) | 2016-03-29 15:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册