【问题标题】:PL/SQL: Finding the average of a substraction of two valuesPL/SQL:求两个值相减的平均值
【发布时间】:2019-10-14 19:16:14
【问题描述】:

本质上,我的部分功能是找到名为 Days_Stayed 的局部变量的平均值,它是 Departure_Date 和 Arrival_Date 的减法。 REGISTRATION 表只存储人到达和离开的日期,而不是停留时间本身。

我的问题是当客户停留超过一次时会发生这种情况,因此有多个 Departure_Dates 和 Arrival_Dates。如果有意义的话,平均值由每个减法的结果的总和组成。

 CREATE OR REPLACE FUNCTION
    (p_CustomerCode CHAR)
    RETURN VARCHAR2
    IS 
    v_Output VARCHAR2(100);
    Days_Stayed DATE;
BEGIN
        --SELECT STATEMENT FROM REGISTRATION TABLE--
        IF Registration_Status = 'R' THEN
            Days_Stayed = Departure_Date - Arrival_Date;
            v_Output := (SELECT TO_CHAR(AVG(Days_Stayed), 'Day') 
                         FROM REGISTRATION WHERE Customer_Code = p_CustomerCode), 
                         --other columns

如果有人能帮我解决这个问题,将不胜感激!

【问题讨论】:

    标签: oracle function plsql


    【解决方案1】:

    听起来应该是:

    v_Output := (SELECT TO_CHAR(AVG(Departure_Date - Arrival_Date), 'Day') 
                             FROM REGISTRATION WHERE Customer_Code = p_CustomerCode)
    

    只需将减法放在 select 语句中。 这行得通吗?

    【讨论】:

    【解决方案2】:

    对我来说,这听起来像 SUM / COUNT,例如

    SQL> with registration (id, departure_date, arrival_date) as
      2    (select 1, date '2019-09-20', date '2019-09-17' from dual union all -- 3 days
      3     select 1, date '2019-08-13', date '2019-08-11' from dual union all -- 2 days
      4     select 1, date '2019-08-08', date '2019-08-01' from dual union all -- 7 days
      5     --
      6     select 2, date '2019-07-20', date '2019-07-19' from dual union all -- 1 day
      7     --
      8     select 3, date '2019-08-27', date '2019-08-25' from dual union all -- 2 days
      9     select 3, date '2019-08-14', date '2019-08-12' from dual           -- 2 days
     10    )
     11  select id,
     12         sum(departure_date - arrival_date) / count(*) avg_days_stayed
     13  from registration
     14  group by id;
    
            ID AVG_DAYS_STAYED
    ---------- ---------------
             1               4
             2               1
             3               2
    
    SQL>
    

    为什么?您的代码减去出发和到达日期(单个值),那么 - 您将如何选择一个值的平均值?也许您打算使用循环(通过每个人)或其他方式,但是 - 上述查询可能会将您推向正确的方向,即没有循环,使用单个查询。

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多