`
郭清明
  • 浏览: 16981 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

求和SQL优化

SQL 
阅读更多
SELECT id
      ,currencyCode
      ,(CASE WHEN total<=3 THEN amount ELSE (3 - last_total)/conversion_rate END) AS target_amount
      ,(CASE WHEN total<=3 THEN target_amount ELSE 3 - last_total END) AS target_amount
  FROM (
SELECT t.*
      ,t.amount*r.conversion_rate as target_amount
      ,SUM(t.amount*r.conversion_rate) OVER(ORDER BY t.amount*r.conversion_rate,id) as total
      ,SUM(t.amount*r.conversion_rate) OVER(ORDER BY t.amount*r.conversion_rate,id) - t.amount*r.conversion_rate as last_total
      ,r.conversion_rate
  FROM t_money t, t_rates r
WHERE t.currencyCode = r.from_currency
       AND r.to_currency = 'usd'
)
WHERE total<=3
      OR total>3
         AND last_total<3
ORDER BY total;


--------------
SELECT id,
       currencyCode,
       (CASE
         WHEN total <= 3 THEN
          amount
         ELSE
          (3 - last_total)/nvl((select nvl(conversion_rate, 1)
                                           from t_rates
                                          where from_currency = currencycode
                                            and upper(to_currency) = 'USD'),
                                         1)
       END)amount,
       (CASE
         WHEN total <= 3 THEN
          target_amount
         ELSE
          3 - last_total
       END) AS target_amount
  FROM (SELECT t.*,
               t.amount * r.conversion_rate as target_amount,
               SUM(t.amount * r.conversion_rate) OVER(ORDER BY t.amount * r.conversion_rate, id) as total,
               SUM(t.amount * r.conversion_rate) OVER(ORDER BY t.amount * r.conversion_rate, id) - t.amount * r.conversion_rate as last_total
          FROM t_money t, t_rates r
         WHERE t.currencyCode = r.from_currency
           AND r.to_currency = 'usd')
WHERE total <= 3
    OR total > 3
   AND last_total < 3
ORDER BY total;
分享到:
评论

相关推荐

    sql中分组和求和重点介绍

    sql在日常使用中,会大量使用到分组求和等语句,这里关于这一块重点介绍一下,希望可以帮助到有需要的兄弟

    SQL 优化之 oracle物化视图

    物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。

    列出SQL Server中具有默认值的所有字段的语句

    这个查询在SQL 2000和SQL 2005中都是兼容的。 Quote: 代码如下:SELECT SO.NAME AS “Table Name”, SC.NAME AS “Column Name”, SM.TEXT AS “Default Value” FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns ...

    MySQL优化之如何查找SQL效率低的原因

    company 表,并且对 profit 字段做求和( sum )操作,相应 SQL 的执行计划如下: mysql&gt; explain select sum(profit) from sales a,company b where a.company_id = b.id and a.year = 2006\G; **********

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.2 SQL优化 257 10.2.1 测试执行计划 257 10.2.2 跨多个执行的测试 260 10.2.3 测试查询改变的影响 263 10.2.4 寻找其他优化机会 266 10.2.5 将子查询因子化应用到PL/SQL中 270 10.3 递归子查询 273 ...

    解析Oracle数据扫描Oracle SQL优化 引导局部范围数据扫描的方法

    但是如果索引的选择性较差时,或者虽然索引的选择性很好,但是要查询的数据范围很大时(如:进行计数、求和等数据统计时),那么此时通过索引来查询数据时,很可能对数据查询性能造成伤害。为什么会这样?这主要是...

    海量数据库的查询优化及分页算法方案 2 之 改良SQL语句

    海量数据库的查询优化及分页算法方案 2 之 改良SQL语句

    处理group by 查询速度太慢的问题 数据量大.doc

    实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

    oracle实验报告

    (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验内容】 一、 准备使用SQL*PLUS 1. 进入SQL*...

    XQuery权威指南(简码·扫描版)

    本书除了用于指导编程外,还可用作提高与优化XML数据检索性能的参考书。  本书不仅适合那些须要操作大量XML数据的程序员(不管是使用C#还是Java等语言的程序员都适合阅读本书),还适合管理XML数据库的管理员,以及...

    数据库系统实现

    专门设计的查询优化模块,可使用直方图确定并执行优化的查询计划。 该项目有7个不同的里程碑。 分配要求文件可在找到。 作业报告可以在找到。 GTests可以在找到。 测试不同的里程碑 最初设定 为了测试数据库,...

    MySQL笔记之函数查询的使用

    sum()求和函数 代码如下:mysql&gt; select sum(grade) from score;mysql&gt; select id,sum(grade) from score where stu_id=901; avg()求平均值函数 代码如下:mysql&gt; select avg(grade) from score where c_name=’计算机...

    VBA常用技巧

    技巧153 调用工作表函数求和 12 技巧154 查找最大、最小值 12 技巧155 不重复值的录入 12 技巧156 获得当月的最后一天 12 技巧157 四舍五入运算 12 157-1 极小值修正法 12 157-2 调用工作表函数法 12 技巧158 使用...

    VBA编程技巧大全

    技巧153 调用工作表函数求和 381 技巧154 查找最大、最小值 381 技巧155 不重复值的录入 383 技巧156 获得当月的最后一天 385 技巧157 四舍五入运算 386 157-1 极小值修正法 386 157-2 调用工作表函数法 387 技巧158...

    delphi 开发经验技巧宝典源码

    0065 如何实现裴波纳契数列求和 42 0066 如何实现百钱百鸡算法 42 0067 如何实现哥德巴赫猜想 43 0068 如何实现韩信点兵 44 0069 求水仙花数的算法 44 0070 求1000以内的完数 45 0071 如何计算x的y次方...

    delphi 开发经验技巧宝典源码06

    0065 如何实现裴波纳契数列求和 42 0066 如何实现百钱百鸡算法 42 0067 如何实现哥德巴赫猜想 43 0068 如何实现韩信点兵 44 0069 求水仙花数的算法 44 0070 求1000以内的完数 45 0071 如何计算x的y次方...

Global site tag (gtag.js) - Google Analytics