商店各种商品都有商品编码表,商品按照类别分为了4个级别(class1>class2>class3>class4)(注意这里的级别是嵌套的如class1是服装,class2是男装或女装),对每天销售的商品进行记录
问1:设计一个数据库表示商品和销售信息
问2:写sql,统计一周各类货物销售总金额,按照由高到低排序
问3:写sql,统计一周级别为class1的商品的销售总金额,列出前20%。

解决方案 »

  1.   

    问3:
    设计表的时候所有物品只按CLASS4级在LEVEL字段标出。
    假如要查CLASS1的商品销售总额,我们先手动确定CLASS4的哪些是属于的CLASS1的,假如x,y,z这三种是属于CLASS1的。
    那么:select sum(price) from table where level in (x,y,z) and rownum<count(*)*0.2; 不就行了吗
      

  2.   

    --商品类型表:
    create table typeTable
    (
      typeId number, --类型ID
      typeName varchar2(50), --类型名称
      pTypeId number --父类型ID
    )
    --商品出售情况表
    create table SPCS
    (
      spId number,  --商品ID
      typeId number,  --类型ID
      spName varchar2(50), --商品名称
      price number(20,2), --出售金额
      time date --出售时间
    )
    --统计一周各类货物销售总金额,按照由高到低排序
    select t.typeName,sum(s.price) 
      from typeTable t,SPCS s 
     where t.typeId = s.typeId 
       and s.time >= sysdate - 7 
     group by t.typeId,t.typeName 
     order by sum(s.price) desc--统计一周级别为class1的商品的销售总金额
    select sum(price) 
      from SPCS
     where time >= sysdate - 7 
       and typeId in (
             select typeId 
              from typeTable 
             start with typeName = 'class1'
           connect by pTypeId = prior typeId
     )
      

  3.   

    用上面哥么的表结果。
    sql:SELECT *
      FROM (SELECT (TO_CHAR(TRUNC(T.TIME, 'day'), 'yyyy-mm-dd') --周第一天
                   || 
                   '至' 
                   ||
                   (TO_CHAR(TRUNC(T.TIME, 'day') + 7, 'yyyy-mm-dd'))--周最后一天
                   ) WEEK,
                   SUM(PRICE) SP
              FROM SPCS T
             GROUP BY TRUNC(T.TIME, 'day')
             ORDER BY SP) T1
     WHERE ROWNUM <= (SELECT COUNT(*)
                        FROM (SELECT COUNT(1)
                                FROM SPCS T
                               GROUP BY TRUNC(T.TIME, 'day')) T1) * 0.2;