`
zzhonghe
  • 浏览: 248144 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用单条SQL优化流程化的统计过程

    博客分类:
  • DB
SQL 
阅读更多
最近是一次成功优化的体验,把原来流程化的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其他的表进行定位判断。
分享到:
评论

相关推荐

    SQL Server 2000数据库程序设计

    此外,通过合理规划存储过程的逻辑流程,如使用CASE语句、循环结构等,可以更加灵活地控制数据处理过程。 **总结**: 以上知识点涵盖了SQL Server 2000数据库程序设计中的一些核心概念和技术,包括数据打包与传输、...

    sql技术收集3

    PL/SQL是Oracle数据库的编程组件,它扩展了SQL,使其能够支持过程化编程,包括变量、条件语句、循环和异常处理等。在PL/SQL中,你可以编写存储过程、函数、触发器等,这些都增强了数据库的灵活性和效率。学习PL/SQL...

    vb+sql简单进销存系统

    【VB+SQL简单进销存系统】是一种基于Visual Basic(VB)编程语言的前端和SQL Server数据库管理系统的后端,用于实现小型企业或个人商店的库存、销售和采购的高效管理。这个系统的设计目的是简化日常的业务流程,提高...

    员工工资管理系统(java+sql)

    3. **事务管理**:在多条SQL语句执行时,使用事务保证数据的一致性和完整性。 4. **索引优化**:为了提高查询效率,可以对经常查询的字段创建索引。 四、系统功能模块 1. **用户登录模块**:验证用户名和密码,...

    MySQL查询优化浅析

    查询优化是数据库管理系统(DBMS)中的一个重要组成部分,其主要目标是在接收到一个SQL查询后,寻找最高效的执行计划,以尽可能快的速度返回查询结果。这一过程涉及到对各种可能的执行路径进行评估,并选择代价最小的...

    美萍进销存sql版2010V6

    进货管理:该模块主要用于记录企业购入商品的详细信息,包括供应商信息、进货价格、数量、日期等,同时支持批量导入和单条录入,便于企业快速完成采购流程并跟踪进货成本。 销售管理:销售管理模块是进销存系统的...

    VB SQL采购管理系统设计与实现(论文 源代码).zip

    该系统旨在帮助企业优化采购流程,提高效率,减少人为错误,实现信息化管理。 首先,VB作为微软的面向对象的编程环境,以其易学易用、开发速度快的特点,常被用于开发Windows应用。在本系统中,VB主要用于界面设计...

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    支持限制单条 SQL 语句使用内存的大小,减少程序 OOM 风险 支持在 CRUD 操作中使用隐式的行 ID 提升点查性能 3.Server 支持 Proxy Protocol 添加大量监控项, 优化日志 支持配置文件的合法性检测 支持 ...

    kettle8.1转换-脚本组件介绍文档

    此组件允许用户在转换过程中动态地生成和执行SQL语句,支持包括CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、TRUNCATE在内的多种SQL命令。特别地,SELECT语句虽然不直接将查询结果传递给后续组件,但可以...

    PLSQL_Developer9.0中文手册.pdf

    - **使用 SQL 窗口**:执行单条或多条 SQL 命令。 - **结果表格处理**:对查询结果进行排序、过滤等操作。 - **实例模式查询**:直接访问 Oracle 实例的内部结构。 - **链接查询**:实现跨表查询的功能。 - **置换...

    PLSQLDeveloper下载

    性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计...

    数据库课设java+sql server2008实现企业人事管理系统.zip

    - **事务管理**:对于涉及多条数据的操作,如员工入职或离职,可能需要使用事务来确保数据的一致性。 3. **企业人事管理功能** - **员工信息管理**:添加、修改、删除员工的基本信息,如姓名、性别、入职日期、...

    工资管理系统

    3. 工资报表:生成工资条,展示详细收入和扣款项,同时提供统计报表,如部门薪资总额、平均薪资等。 4. 审核与发放:设置工资审批流程,完成审批后自动发放,确保工资的准确无误。 总结,工资管理系统是软件工程、...

    Ora9iSQLRef.7z 帮助文档

    3. **索引和优化**:介绍如何创建、管理和使用索引来提高查询性能,以及使用EXPLAIN PLAN分析查询执行计划,进行SQL优化。 4. **游标和PL/SQL编程**:游标是处理单条查询结果的重要工具,文档中详细讲解了游标的...

    基于SQL SERVER实现教务管理系统数据库

    - 查询单条或多条教务信息。 - 成绩查询:输入学号和密码即可查看学生的成绩。 ##### 3. 操作管理 - **功能说明**:此部分功能主要用于管理员对系统中的用户和信息进行管理。 - **具体功能**: - 添加、修改或...

Global site tag (gtag.js) - Google Analytics