存储过程记录<二>
2016-11-06 17:17
337 查看
昨天在下班的时候,刚巧无事有一个同事遇到一个数据库查询的问题,然后我就去看看,刚开始的时候没理解他是什么意思,最后问了几遍才明白是什么意思,当然那表结构我也不是很清楚的
今天刚好记录一下,当然那问题虽然解决了但是某些时候需求虽然达到了,但是还是会出现意外,这不仅仅是刚开始的数据库设计的问题,更要紧的是没有把握住客户的需求。我就说说大概的意思:这个报表就是想查询出这个人 消费了物品的数量 和 钱数
Useras 记录的是这个人购买的记录,当然命名的时候想错了所以就用Useras替代吧。
Order记录的是一个订单的主表
OrderDetail记录的是一个详情表
先插入数据
当然,我本来是想用存储过程来写的,但是那个同事代码已经写好了,不想在修改所以我就用了好几遍的查询
我的方法先进行按照人员名字为主键,当然这很不合理最起码应该是CODE的,所以我先写了一部分查询,分别
查询这个人购买的数量,和这个人购买的钱数,然后再以名字作为分组依据(名字会出现重复)
最后的语句:
虽然功能完成了,但是这只能查询小批量数据的,如果是大批量数据,这还是不行的。这么多嵌套在一起的查询,肯定是会出问题。
今天刚好记录一下,当然那问题虽然解决了但是某些时候需求虽然达到了,但是还是会出现意外,这不仅仅是刚开始的数据库设计的问题,更要紧的是没有把握住客户的需求。我就说说大概的意思:这个报表就是想查询出这个人 消费了物品的数量 和 钱数
select * from Useras select * from [Order] select * from OrderDetail
Useras 记录的是这个人购买的记录,当然命名的时候想错了所以就用Useras替代吧。
Order记录的是一个订单的主表
OrderDetail记录的是一个详情表
先插入数据
insert into useras values('张无忌',1) insert into useras values('张无忌',2) insert into OrderDetail values(1,'神话笔记本','2','3') insert into OrderDetail values(1,'天鸟笔记本','4','6') insert into OrderDetail values(2,'国乒羽毛球','2','3') insert into OrderDetail values(2,'天鸟羽毛球','4','6') insert into [Order] values('笔记本系列') insert into [Order] values('羽毛球系列')
当然,我本来是想用存储过程来写的,但是那个同事代码已经写好了,不想在修改所以我就用了好几遍的查询
我的方法先进行按照人员名字为主键,当然这很不合理最起码应该是CODE的,所以我先写了一部分查询,分别
查询这个人购买的数量,和这个人购买的钱数,然后再以名字作为分组依据(名字会出现重复)
select sum(Quantitys) as Quantitys,Name from (select k.Name,l.Quantitys,Q.Moneys from Useras as K inner join (select sum(Quantity)as Quantitys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as L on k.OrderID=l.OrderID inner join (select sum(Moneys) as Moneys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as Q on K.OrderID=Q.OrderID) as H group by Name select sum(Moneys) as Moneys,Name from (select k.Name,l.Quantitys,Q.Moneys from Useras as K inner join (select sum(Quantity)as Quantitys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as L on k.OrderID=l.OrderID inner join (select sum(Moneys) as Moneys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as Q on K.OrderID=Q.OrderID) as G group by Name
最后的语句:
select HJ.Name,Hk.Quantitys,HL.Moneys from Useras as HJ inner join (select sum(Quantitys) as Quantitys,Name from (select k.Name,l.Quantitys,Q.Moneys from Useras as K inner join (select sum(Quantity)as Quantitys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as L on k.OrderID=l.OrderID inner join (select sum(Moneys) as Moneys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as Q on K.OrderID=Q.OrderID) as H group by Name) as HK on HJ.Name=HK.Name inner join ( select sum(Moneys) as Moneys,Name from (select k.Name,l.Quantitys,Q.Moneys from Useras as K inner join (select sum(Quantity)as Quantitys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as L on k.OrderID=l.OrderID inner join (select sum(Moneys) as Moneys,OrderID from [Order] as b inner join OrderDetail as c on b.ID=c.OrderID group by OrderID) as Q on K.OrderID=Q.OrderID) as G group by Name) as HL on HJ.Name=Hl.Name group by HJ.Name,Hk.Quantitys,HL.Moneys
虽然功能完成了,但是这只能查询小批量数据的,如果是大批量数据,这还是不行的。这么多嵌套在一起的查询,肯定是会出问题。
相关文章推荐
- ORACLE 定时执行存储过程 <二>
- 记录计算机专业研究生小论文从选题到投稿全过程<二> 选题
- 记录NGUI<二>
- 转载只为记录经典之<va_start va_arg va_end 的使用和原理二>
- Redis 研究记录<二>
- Step By Step(Java 常用对象篇<二>)
- 大数据之Hive<二>
- 在别的地方看的<<给程序员介绍一些C++开源库>>,记录给大家共同学习
- 珠玑编程读书笔记——<二>
- 面试题<二>
- 【计算机视觉】背景建模之PBAS<二>
- V4L2 API详解 <二> Camera详细设置
- cacti_nagios<at>centos(redhat)整合安装简要记录
- 黑马程序员--SQLServer基础<二>SQL语句1
- <二> SQL 基础
- 黑马程序员 Java基础<二> 运算符
- greenDao orm 进阶 <二>
- UE4的JSON读写方式<二>
- (总结)IO之File类<二>
- 【monkey】mokey常用事件<二>