`
trydofor
  • 浏览: 150432 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

003.测验.SQL之债权统计

阅读更多


# 003.测验.SQL之债权统计

这是一个比较贴近实际业务的SQL练习,技术点比较常用和实用。 

作者:史荣久 日期:2014-11-26 许可:CC BY-SA 3.0 

## 任务说明

如下图,业务中,存在以下数据和数据关系: 
一个顾客(CUST)会有零或多个债权(LOAN), 
债权会有零或多个交易(TRANSACTION)。

LOAN表BALANCE为余额,REPAYDAY为下次还款日, 
TRANSACTION表中,ID是自增的,AMOUNT为金额, 
OPRTIME为操作日,TYPE=1为贷款,TYPE=2为还款。

![ER图和数据](/images/post/actions/003/er-data.png)


## 思考问题

1)各顾客的余额,用SQL得到下图输出。

![各顾客的余额](/images/post/actions/003/result-1.png)


2)还款最多交易,即用SQL得到下图输出。 
在2010年从01-01(含)到06-01(不含)时间段, 
找出各债权还款最多的交易数据(可能多条), 
并显示对应的顾客名,


![还款最多交易](/images/post/actions/003/result-2.png)


3)交易表有10亿数据,检索结果响应很慢, 
可能是何原因,如何排查原因,如何改善。

4)本题中3张表,设计上有何缺陷,如何改善。

## 测试数据

通过以下SQL创建表结构和初始数据。

CREATE  TABLE `CUST` (
  `CUSTID` VARCHAR(12) NOT NULL ,
  `NAME` VARCHAR(20) NOT NULL ,
  `AGE` INT(11) NOT NULL ,
  PRIMARY KEY (`CUSTID`) )
ENGINE = INNODB DEFAULT CHARACTER SET = UTF8 COLLATE = UTF8_BIN;

CREATE  TABLE `LOAN` (
  `LOANID` VARCHAR(20) NOT NULL ,
  `CUSTID` VARCHAR(12) NOT NULL ,
  `BALANCE` DECIMAL(16,4) NOT NULL ,
  `REPAYDAY` DATE NULL DEFAULT NULL ,
  PRIMARY KEY (`LOANID`) ,
  UNIQUE INDEX `ID_UNIQUE` (`LOANID` ASC) ,
  INDEX `CUST` (`CUSTID` ASC) ,
  CONSTRAINT `CUST`
    FOREIGN KEY (`CUSTID` )
    REFERENCES `CUST` (`CUSTID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = INNODB DEFAULT CHARACTER SET = UTF8 COLLATE = UTF8_BIN;

CREATE  TABLE `TRANSACTION` (
  `ID` INT(11) NOT NULL ,
  `AMOUNT` DECIMAL(16,4) NOT NULL ,
  `TYPE` INT(11) NOT NULL ,
  `OPRTIME` DATETIME NOT NULL ,
  `LOANID` VARCHAR(20) NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `LOAN` (`LOANID` ASC) ,
  CONSTRAINT `LOAN`
    FOREIGN KEY (`LOANID` )
    REFERENCES `LOAN` (`LOANID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = INNODB DEFAULT CHARACTER SET = UTF8 COLLATE = UTF8_BIN;

INSERT INTO CUST(CUSTID, NAME, AGE) VALUES
('100000000101', '张三', 23),
('100000000201', '李四', 24),
('100000000301', '王五', 25);

INSERT INTO LOAN(LOANID, CUSTID, BALANCE, REPAYDAY) VALUES
('10000000010100000001', '100000000101', 3000, '2010-07-03'),
('10000000010100000002', '100000000101', 3500, '2010-07-23'),
('10000000020100000001', '100000000201', 4000, '2010-07-04');

INSERT INTO TRANSACTION(ID, AMOUNT, TYPE, OPRTIME, LOANID) VALUES
(1, -10000, 1, '2010-03-03 15:15:15', '10000000010100000001'),
(2,   2000, 2, '2010-04-03 15:15:15', '10000000010100000001'),
(3,   2000, 2, '2010-05-03 15:15:15', '10000000010100000001'),
(4,   3000, 2, '2010-06-03 15:15:15', '10000000010100000001'),
(5,  -8000, 1, '2010-04-23 15:15:15', '10000000010100000002'),
(7,   2000, 2, '2010-05-23 15:15:15', '10000000010100000002'),
(8,   2500, 2, '2010-06-23 15:15:15', '10000000010100000002'),
(9, -10000, 1, '2010-01-04 15:15:15', '10000000020100000001'),
(10,  1000, 2, '2010-02-04 15:15:15', '10000000020100000001'),
(11,  1000, 2, '2010-03-04 15:15:15', '10000000020100000001'),
(12,  1500, 2, '2010-04-04 15:15:15', '10000000020100000001'),
(13,  1500, 2, '2010-05-04 15:15:15', '10000000020100000001'),
(14,  1000, 2, '2010-06-04 15:15:15', '10000000020100000001');


-----
题图:《黑客帝国》以很多方式解析真实、超现实,还有人的观点是实质的、物理的世界才是虚幻。
原文:http://www.moilioncircle.com/actions/003.quiz.sql-loan-sum.html
0
0
分享到:
评论

相关推荐

    最新C#版财务管理系统下载

    4. 测试:单元测试、集成测试、系统测试,确保功能完整无误。 5. 部署:安装到目标环境,进行上线前的调试和优化。 6. 维护:定期更新和修复问题,保证系统稳定运行。 总结,C#凭借其强大的特性和.NET框架的支持,...

    基于ssm中小型企业财务管理系统.zip

    MyBatis是一个轻量级的持久层框架,它简化了数据库操作,通过XML或注解方式灵活配置SQL与映射结果。 在本项目中,Spring作为基础架构层,负责整个应用的控制流程和事务管理。SpringMVC处理用户的请求,将请求分发到...

    financial accounting

    财务会计是企业管理和决策的重要工具,它主要关注如何记录、汇总、分析和解释企业的经济活动,以便于外部利益相关者(如投资者、债权人、监管机构)理解企业的财务状况和经营成果。此书详细讲解了以下几个核心知识点...

    财务管理系统应用程序设计(论文+程序源码+设计)

    2. 应收应付管理:记录企业的债权债务,支持自动提醒、统计分析,帮助企业控制现金流。 3. 固定资产管理:管理固定资产的购置、折旧、处置等生命周期过程,生成相应的财务报告。 4. 成本管理:对生产、运营过程中的...

    数据库—财务管理系统

    4. **应付/应收账款管理**:管理企业的债权债务,追踪付款期限,防止逾期未付或未收款项,确保现金流健康。 5. **薪资与福利**:处理员工薪酬计算、税务申报、社保公积金缴纳等,减少人力资源部门的工作负担。 6. ...

    DebtCount

    《债务统计系统——Java技术深度剖析》 "DebtCount"是一个可能的项目或软件工具的名称,专门用于处理和统计债务数据。基于其标签"Java",我们可以推断这是一个使用Java编程语言开发的应用程序。Java是世界上最流行...

    C#财务管理系统

    C#是Microsoft公司推出的一种面向对象的、运行于.NET Framework之上的高级编程语言,以其强大的功能和易读性在软件开发领域广受欢迎。本系统充分利用了C#的特性,为用户提供了一个高效、稳定、用户友好的财务管理...

    spring+springmvc+mybatis搭建的一个鼎峰p2p网贷系统后台管理系统附带mysql数据库

    【描述】:在描述中,我们看到这个项目是基于Spring框架的,它提供了依赖注入(DI)和面向切面编程(AOP)的能力,使得代码更加模块化,易于管理和测试。SpringMVC是Spring框架的一部分,专门用于处理HTTP请求和响应...

    Who-Do-I-Owe:一个跟踪你欠别人多少钱的应用程序!

    可能需要创建一个用户表来存储债权人和债务人的信息,以及一个交易表来记录每次借贷的详情,如交易金额、日期等。 5. **GUI(图形用户界面)**:为了让用户更直观地操作,应用通常会有一个GUI。Java的Swing或JavaFX...

    普通股:GeneralShare

    6. **测试用例(Unit Tests)**:为了确保代码的正确性,项目可能包含使用NUnit或xUnit等测试框架编写的单元测试,测试股票和股东类的行为是否符合预期。 7. **文档(Documentation)**:项目可能附带Markdown或...

    GUI-DebtBook

    通过GUI-DebtBook,用户可以方便地记录债务信息,包括债权人、债务金额、还款日期和利息等关键数据。 在C#编程语言中,GUI应用程序的构建通常使用Windows Presentation Foundation (WPF) 或 Windows Forms 技术。...

Global site tag (gtag.js) - Google Analytics