商店各种商品都有商品编码表,商品按照类别分为了4个级别(class1>class2>class3>class4)(注意这里的级别是嵌套的如class1是服装,class2是男装或女装),对每天销售的商品进行记录
问1:设计一个数据库表示商品和销售信息
问2:写sql,统计一周各类货物销售总金额,按照由高到低排序
问3:写sql,统计一周级别为class1的商品的销售总金额,列出前20%。
问1:设计一个数据库表示商品和销售信息
问2:写sql,统计一周各类货物销售总金额,按照由高到低排序
问3:写sql,统计一周级别为class1的商品的销售总金额,列出前20%。
解决方案 »
- 请问在oracle中如何将两列合并成一列select出来
- 如何将从sql2005逆向生成的pdm,转化为oracle数据库或者脚本,急急急,在线等!
- 求救,execute immediate执行动态sql,快崩溃了
- oracle 创建了用户怎么在方案里面没有对应的呢?哪位高手帮忙解决一下。
- 关于Oracle中的性能问题
- oracle web管理台 网络环境改变 无法访问
- oracle中数据文件包括什么?
- 在PRO*C中,如何运用DOS命令
- 如何写查询从2003-12-1到2003-12-9的SQL语句?
- 紧急问题,求救高手,谢谢!
- 求sql高手帮忙优化一个oracle的sql。
- web service连接ORACLE的奇怪现象
设计表的时候所有物品只按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; 不就行了吗
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
)
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;