zoukankan      html  css  js  c++  java
  • oracleI基础入门附(1)算中位数,算累积总计 Crazy

    算中位数
    要算出中位数,我们必须要能够达成以下几个目标:
    将资料依序排出,并找出每一行资料的排名。
    找出『中间』的排名为何。举例来说,如果总共有 9 笔资料,那中间排名就是 5 (有 4 笔
    资料比第 5 笔资料大,有 4 笔资料比第 5 笔资料小)。
    找出中间排名资料的值。
    来看看以下的例子。假设我们有以下的表格:
    Total_Sales 表格
    Name           Sales
    John              10
    Jennifer          15
    Stella               20
    Sophia              40
    Greg                 50
    Jeff                    20
    要找出中位数,我们就键入:
    SELECT Sales Median FROM
    (SELECT a1.Name, a1.Sales, COUNT(a1.Sales) Rank
    FROM Total_Sales a1, Total_Sales a2
    WHERE a1.Sales < a2.Sales OR (a1.Sales=a2.Sales AND a1.Name <= a2.Name)
    group by a1.Name, a1.Sales
    order by a1.Sales desc) a3
    WHERE Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Total_Sales);
    结果:
    Median
    20
    发现,第 2 行到第 6 行是跟产生 排名 的语句完全一样。第 7 行则是算出中间
    的排名。DIV 是在 MySQL 中算出商的方式。在不同的数据库中会有不同的方式求商。第 1
    行则是列出排名中间的资料值。
    算累积总计
    算出累积总计是一个常见的需求,可惜以 SQL 并没有一个很直接的方式达到这个需求。要
    以 SQL 算出累积总计,基本上的概念与列出排名类似:第一是先做个表格自我连结 (self
    join),然后将结果依序列出。在做列出排名时,我们算出每一行之前 (包含那一行本身) 有
    多少行数;而在做累积总计时,我们则是算出每一行之前 (包含那一行本身) 的总合。
    来看看以下的例子。假设我们有以下的表格:
    Total_Sales 表格
    Name                  Sales
    John                   10
    Jennifer             15
    Stella                20
    Sophia               40
    Greg                  50
    Jeff                    20
    要算出累积总计,我们就键入:
    SELECT a1.Name, a1.Sales, SUM(a2.Sales) Running_Total
    FROM Total_Sales a1, Total_Sales a2
    WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
    GROUP BY a1.Name, a1.Sales
    ORDER BY a1.Sales DESC, a1.Name DESC;
    结果:
    Name Sales Running_Total
    Greg 50 50
    Sophia 40 90
    Stella 20 110
    Jeff 20 130
    Jennifer 15 145
    John 10 155
    在以上的 SQL 语句中, WHERE 子句和 ORDER BY 子句让我们能够在有重复值时能够
    算出正确的累积总计。

  • 相关阅读:
    PHP快速排序算法
    PHP选择排序算法
    php几个常用的概率算法(抽奖、广告首选)
    免费Git客户端:sourcetree详细介绍
    apidoc @apiGroup兼容中文
    PHP中的精确计算bcadd,bcsub,bcmul,bcdiv 及 扩展安装
    mysql-表分区
    mysql表优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
    mysql-锁
  • 原文地址:https://www.cnblogs.com/flyscan/p/2545974.html
Copyright © 2011-2022 走看看