`
cyxlgzs
  • 浏览: 89373 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

SQL语句的相关记录(一)

 
阅读更多

在这里记录一些比较烦人的SQL语句,有的时候觉得简单,但有的时候还真难写出来。还是功力不够啊,加油

1、统计当年以前的销售总额

表结构

income

--year:年份

--quantity:数量

创建数据库脚本

create table income(
    year int not null primary key,
    quantity int not null);


插入数据

insert into income(year,quantity) values(2005,1000);
insert into income(year,quantity) values(2006,3000);
insert into income(year,quantity) values(2007,5000);
insert into income(year,quantity) values(2008,8000);
insert into income(year,quantity) values(2009,12000);


统计sql

select year as newyear,(select sum(quantity) from income where year<=newyear) as total from income group by newyear;


结果

newyear |totaol

2005|1000

2006|4000

2007|9000

2008|17000

2009|29000

2、数据库设计问题:当数据对象拥有的父子级别关系纵向很长时,比如说公司的组织结构,总公司分为分公司,分公司又有分公司……,这种情况该如何设计表结构

这是以前我去一家公司面试遇到的问题,当时我就想到了继承关系,回答的答案是,设计一个父表,子表关联父表的id,一次这样,然后面试关问我如果这种级别关系有100个,那也就是需要设计一百张表,然后查询某公司的所有子公司和父公司的时候,这100张表都要关联查询,这样做是不是太复杂,效率太慢了,想想确实也是。他让我再想想有没有更好的解决方案。当时我的脑子就蒙的,想来想去都是继承关系。

其实这个问题我在第一家公司就遇到过,而且解决办法还是相对可以,就这样我被淘汰了。下面说说这种解决方案

遇到这种级别继承关系在设计数据库时,千万不要老是思想固化在继承关系上。我们可以采用给机构进行编号,在编号上面体现继承的父子关系,解决方法如下

总公司编号:01

一级分公司两个,分别编号为:01-01,01-02

一级分公司下面的每个分公司又有两个子公司,这四个公司的编号分别为:01-01-01,01-01-02;01-02-01,01-02-02

……

就这样,我们采用编号唯一来确定某个公司,同样我们在知道某个公司的编号时,我们就能知道他所属的级别和他的父公司和子公司,这样查询起来就方便多了,设计时一张表就够了,查询时采用字符串匹配就可以很容易的 找出该公司的父级和子级

待续……

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics