创建过程以测量其他表的统计信息。
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;
/
【讨论】:
以上是关于创建过程以测量其他表的统计信息。的主要内容,如果未能解决你的问题,请参考以下文章