创建过程以测量其他表的统计信息。

Posted

技术标签:

【中文标题】创建过程以测量其他表的统计信息。【英文标题】:Creating procedure to measure statistics from other table. 【发布时间】:2014-01-03 02:53:46 【问题描述】:

我的大学任务给我带来了麻烦,我将向您介绍基本信息,以便您了解我的问题。

首先我有桌子:

CREATE TABLE Marriage (
       Id_Marriage        INTEGER,
       Marriage_date      DATE,
       Date_of_expiration DATE,
       Reason_of_expiration VARCHAR2(80)    
);

此表中的数据如下所示:

ID  Marriage_date  Date_of_expiration  Reason_of_expiration
1   39/04/12       94/11/16            Death 

然后我必须创建第二个表:

CREATE TABLE Statistics (
       Year                INTEGER, --(or date perhaps?)
       Number_of_marriages INTEGER,
       Number_of_divorces  INTEGER
);

我的工作是创建程序,用信息填充这个统计表。因此,餐桌婚姻中每年必须有结婚和离婚(或结束的婚姻)的数量。可选地,它还可以在屏幕上打印数据以及将行插入婚姻。

我真的没有想出如何开始的想法。我想我需要某种游标,我知道我可以通过执行以下操作从日期中提取年份:

year := SUBSTR (marriage_Date, 1, 2);

除此之外我一无所有,因此非常感谢任何帮助!

提前感谢所有参与的人。

【问题讨论】:

这个过程多久执行一次?一次还是每年一次?一年中的什么时候? 坦率地说我不知道​​,这是一个与现实生活中的任何例子完全无关的愚蠢的单任务。 【参考方案1】:

您不需要执行此操作。您可以使用以下查询,

INSERT INTO STATISTICS
     SELECT to_number(to_char(marriage_date, 'YYYY')) YEAR,
            count(id_marriage) number_of_marriages,
            sum(CASE WHEN reason_of_expiration != 'Death' THEN 1
                     ELSE 0
                END) number_of_divorces
     FROM   marriage
     GROUP BY to_number(to_char(marriage_date, 'YYYY'));

希望对你有帮助。

【讨论】:

是的,一切都很好,就像我说的那样,创建程序是我的任务,不管它是多么愚蠢的任务。好。大学。【参考方案2】:

看了你的问题我觉得最大的缺陷是不需要创建程序,其实不需要自己创建表!我想知道这是一种什么样的练习,除了数据库设计的基础知识(包括规范化)之外,您还学到了其他所有知识。现实生活中的例子与此完全不同。

至于你的问题,没有人关心执行的细节,下面的代码就足够了:

CREATE OR REPLACE PROCEDURE calculateStatistics
IS
BEGIN
    DELETE FROM statistics;
    INSERT INTO statistics
         SELECT to_number(to_char(marriage_date, 'YYYY')) AS YEAR,
                count(id_marriage) as number_of_marriages,
                sum(CASE UPPER(reason_of_expiration)
                         WHEN  = 'DIVORCE' THEN 1
                         ELSE 0
                    END) number_of_divorces
         FROM   marriage
         GROUP BY to_number(to_char(marriage_date, 'YYYY'));
END;
/

【讨论】:

以上是关于创建过程以测量其他表的统计信息。的主要内容,如果未能解决你的问题,请参考以下文章

SQL调优技巧:统计信息(文末福利)

4统计信息

Linux Sar命令详解

在创建聚集索引期间是不是会更新表统计信息?

oracle收集统计信息无法开并行

分析Hive表和分区的统计信息(Statistics)