最近是一次成功优化的体验,把原来流程化的Java+N条SQL的统计流程精简成了一条SQL语句,成功减少了很多行Java代码,减少很多次连接以及流量,效率提高了好几倍。
类似环境:
create table items (id int,price int, mnt int, total int);
insert into items values
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
(rand()*1000, rand()*100, rand()*10,0),
....
;
需求:
需要在id是1~100, 100~200,200~300...的商品分组上计算出销售总额,并且把这个总额记录到每个统计范围内最小id的那个商品的total栏目里面,同时该组其他id的total值置为0;
按一般流程的做法:
先select id/100 as level, sum(price*mnt) as total group by round(id/100),得到一个结果集
然后得每个level所对应的min(id)
最后再一条条update所有的items, 非min(id)的total设置成0,min(id)设置成统计出来的total值.
优化后的SQL:
update items as i inner join (
select min(id) as id, floor(id/100) as level, sum(price*mnt) as total from items group by level
) as t on t.level=floor(i.id/100)
set i.total=if(i.id=t.id,t.total,0);
其实主要用到了update的过程中,join其他的表进行定位判断。
分享到:
相关推荐
此外,通过合理规划存储过程的逻辑流程,如使用CASE语句、循环结构等,可以更加灵活地控制数据处理过程。 **总结**: 以上知识点涵盖了SQL Server 2000数据库程序设计中的一些核心概念和技术,包括数据打包与传输、...
PL/SQL是Oracle数据库的编程组件,它扩展了SQL,使其能够支持过程化编程,包括变量、条件语句、循环和异常处理等。在PL/SQL中,你可以编写存储过程、函数、触发器等,这些都增强了数据库的灵活性和效率。学习PL/SQL...
【VB+SQL简单进销存系统】是一种基于Visual Basic(VB)编程语言的前端和SQL Server数据库管理系统的后端,用于实现小型企业或个人商店的库存、销售和采购的高效管理。这个系统的设计目的是简化日常的业务流程,提高...
3. **事务管理**:在多条SQL语句执行时,使用事务保证数据的一致性和完整性。 4. **索引优化**:为了提高查询效率,可以对经常查询的字段创建索引。 四、系统功能模块 1. **用户登录模块**:验证用户名和密码,...
查询优化是数据库管理系统(DBMS)中的一个重要组成部分,其主要目标是在接收到一个SQL查询后,寻找最高效的执行计划,以尽可能快的速度返回查询结果。这一过程涉及到对各种可能的执行路径进行评估,并选择代价最小的...
进货管理:该模块主要用于记录企业购入商品的详细信息,包括供应商信息、进货价格、数量、日期等,同时支持批量导入和单条录入,便于企业快速完成采购流程并跟踪进货成本。 销售管理:销售管理模块是进销存系统的...
该系统旨在帮助企业优化采购流程,提高效率,减少人为错误,实现信息化管理。 首先,VB作为微软的面向对象的编程环境,以其易学易用、开发速度快的特点,常被用于开发Windows应用。在本系统中,VB主要用于界面设计...
支持限制单条 SQL 语句使用内存的大小,减少程序 OOM 风险 支持在 CRUD 操作中使用隐式的行 ID 提升点查性能 3.Server 支持 Proxy Protocol 添加大量监控项, 优化日志 支持配置文件的合法性检测 支持 ...
此组件允许用户在转换过程中动态地生成和执行SQL语句,支持包括CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、TRUNCATE在内的多种SQL命令。特别地,SELECT语句虽然不直接将查询结果传递给后续组件,但可以...
- **使用 SQL 窗口**:执行单条或多条 SQL 命令。 - **结果表格处理**:对查询结果进行排序、过滤等操作。 - **实例模式查询**:直接访问 Oracle 实例的内部结构。 - **链接查询**:实现跨表查询的功能。 - **置换...
性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计...
- **事务管理**:对于涉及多条数据的操作,如员工入职或离职,可能需要使用事务来确保数据的一致性。 3. **企业人事管理功能** - **员工信息管理**:添加、修改、删除员工的基本信息,如姓名、性别、入职日期、...
3. 工资报表:生成工资条,展示详细收入和扣款项,同时提供统计报表,如部门薪资总额、平均薪资等。 4. 审核与发放:设置工资审批流程,完成审批后自动发放,确保工资的准确无误。 总结,工资管理系统是软件工程、...
3. **索引和优化**:介绍如何创建、管理和使用索引来提高查询性能,以及使用EXPLAIN PLAN分析查询执行计划,进行SQL优化。 4. **游标和PL/SQL编程**:游标是处理单条查询结果的重要工具,文档中详细讲解了游标的...
- 查询单条或多条教务信息。 - 成绩查询:输入学号和密码即可查看学生的成绩。 ##### 3. 操作管理 - **功能说明**:此部分功能主要用于管理员对系统中的用户和信息进行管理。 - **具体功能**: - 添加、修改或...