日期:2014-05-17  浏览次数:20922 次

马士兵视频中一道关于sql的题,有点难度,请高手求解
题目:用sql语句完成下列1,2题,至于测试的时候在什么数据库中都可以
Table product1;
产品productName1 颜色color1 数量num1

  产品1 红 133
  产品1 蓝 126
  产品2 蓝 103
  产品2 红 null
  产品2 红 89
  产品1 红 203

1.按产品分类仅列出各类商品中红色多于蓝色的商品名称及差额数量

2.按产品分类,将数据按如下方式进行统计显示

  产品productName2 红色rednum 蓝色bluenum
  产品1 1500 1298
  .........



------解决方案--------------------
SQL code

--1
select productName1,color1,
       sum(decode(color1,'红',1,0))-sum(decode(color1,'蓝',1,0)) num_
  from product1
 group by productName1,color1
 having sum(decode(color1,'红',1,0)) > sum(decode(color1,'蓝',1,0)); 
--2
select productName1,
       sum(decode(color1,'红',1,0)) 红色rednum ,
       sum(decode(color1,'蓝',1,0)) 蓝色bluenum
  from product1
 group by productName1;

------解决方案--------------------
探讨
非常感谢一楼,但是你的那个1好像只是记录条数而没有涉及到产品的数量,另外那个null值在decode中是怎么处理的?

------解决方案--------------------
SQL code

select productName1,color1,
    sum(decode(color1,'红',nvl(num1,0),0))-sum(decode(color1,'蓝',nvl(num1,0),0)) num_
from product1
group by productName1,color1
having sum(decode(color1,'红',nvl(num1,0),0)) > sum(decode(color1,'蓝',nvl(num1,0),0))