oracle 创建从其他表测量统计信息的过程

8aqjt8rx  于 2023-04-29  发布在  Oracle
关注(0)|答案(2)|浏览(134)

我有大学的任务,这给我的麻烦,我会走你通过基本信息,以便您可以了解我的问题。
首先,我有一个表:

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);

接下来我可以尝试什么?

7ivaypg9

7ivaypg91#

你不需要做手术。可以使用下面的查询,

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'));

希望能帮上忙。

avkwfej4

avkwfej42#

阅读你的问题我觉得最大的缺陷就是没有必要创建一个程序,其实也没有必要创建一个表本身!我想知道这是一种什么样的练习,除了数据库设计的基础知识,包括规范化。真实的生活中的例子与此完全不同。
至于你的问题,因为没有人关心执行的细节,下面的代码就足够了:

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;
/

相关问题