SalesOrder 合同表统计:1.每个地区的销售总额并降序排列2.每个地区的销售人员数量3.每个地区销售金额最少的销售人员4.各个地区所有超过每个地区合同额的平均值的合同,销售人员 orderID(主键) 地区region 销售人员sale 合同总额total
1 A 张三 10000
2 A 李四 12000
3 B 王五 30000
4 C 小刘 20000
5 C 小马 23000 第三个,第四个不知道怎么写?
1 A 张三 10000
2 A 李四 12000
3 B 王五 30000
4 C 小刘 20000
5 C 小马 23000 第三个,第四个不知道怎么写?
解决方案 »
- Oralce建表 目录
- 我是想在查询职工表的信息前只给当前用户赋予查询的权限然后在查完后收回权限但创触发器时报错
- Oracle问题,请教各位大哥。
- 数据库时间字段 里存的是 类似 1145004803421一窜数字 怎么转成2006年04月14日 16:53
- .net framework 3.5 访问ORACLE 9i 数据库方法?
- 问一个sum(decode()) 问题 请帮忙,谢谢了
- 优化高手进!
- table or view does not exist(急急急!!!)
- 我们的论坛正式运行,希望大家踊跃注册.
- plsql developer调试存储过程一直执行,无法进入但不调试中
- 问一句SQL写法
- Oracle聚合函数优缺点是什么?如何优化。
--第三个
select region,sale from SalesOrder s1
where total=(select min(total)
from SalesOrder s2
where s1.region=s2.region);
--第四个(所有超过),因此B区不包括,若改为s1.total>=s2.avgtotal则可包括B
select s1.region,s1.orderID from SalesOrder s1,(
select region,avg(total) avgtotal from SalesOrder group by region) s2
where s1.region=s2.region and s1.total>s2.avgtotal;
select sale,region,row_number() over(partition by region order by total) rm from a05)
where rm=1;select a05.region,total from a05,(select avg(total) avgtotal,region from a05 group by region) t
where a05.total > t.avgtotal
and a05.region = t.region;
SELECT 1 orderID,'A' region,'張三' sale,10000 total FROM dual
UNION ALL
SELECT 2,'A','李四',12000 FROM dual
UNION ALL
SELECT 3,'B','王五',30000 FROM dual
UNION ALL
SELECT 4,'C','小劉',20000 FROM dual
UNION ALL
SELECT 5,'C','小馬',23000 FROM dual
)
--第3题
--SELECT region,sale,total FROM SalesOrder t WHERE total=(SELECT Min(total) FROM SalesOrder WHERE region=t.region);
SELECT orderID,region,sale,total FROM (
SELECT orderID,region,sale,total,Row_Number() over (PARTITION BY region ORDER BY total)rn FROM SalesOrder
)WHERE rn=1;
--第4题
SELECT orderID,region,sale,total,avg FROM (
SELECT orderID,region,sale,total,Avg(total) over (PARTITION BY region)Avg FROM SalesOrder
)WHERE total>=avg;
(
SELECT 1 orderID, 'A' region,'张三' sale,10000 total FROM DUAL
UNION ALL
SELECT 2, 'A', '李四', 12000 FROM DUAL
UNION ALL
SELECT 3, 'B', '王五', 30000 FROM DUAL
UNION ALL
SELECT 4, 'C', '小刘', 20000 FROM DUAL
UNION ALL
SELECT 5, 'C', '小马', 23000 FROM DUAL
)
SELECT A.ORDERID,A.REGION,A.SALE
FROM T A,
( SELECT REGION,MIN(TOTAL) MTOTAL
FROM T
GROUP BY REGION) B
WHERE A.REGION=B.REGION AND A.TOTAL=B.MTOTAL
ORDERID REGION SALE
---------------------- ------ ------
1 A 张三
3 B 王五
4 C 小刘 3 rows selected
SELECT A.ORDERID,A.SALE,A.REGION
FROM T A,
(SELECT REGION,AVG(TOTAL) AVGS
FROM T
GROUP BY REGION) B
WHERE A.REGION=B.REGION AND A.TOTAL>B.AVGS
ORDERID SALE REGION
---------------------- ------ ------
2 李四 A
5 小马 C 2 rows selected
1. select region,sum(total) from SalesOrder group by region order by sum(total) DESC;
2. select region,count(sale) from SalesOrder group by region;
3. select region,sale,total from SalesOrder where (region,total) in (select region,min(total) from SalesOrder group by region);
4.select s1.orderID,s1.region,s1.sale,s1.total
from salesorder s1, (select region, avg(total) avgtotal from salesorder group by region) s2 where s1.region=s2.region and s1.total>=s2.avgtotal;
本人运行了,没有问题