【问题标题】:how to count row1 from table1/count row1 from table2 returned result is group by day如何从table1中计算row1/从table2中计算row1返回的结果是按天分组的
【发布时间】:2014-08-30 09:44:36
【问题描述】:

我知道这一点,但我知道它不会起作用。

select date_decision,
      (select count(*) from table2)/
      (select count(*) from table1)
from dual
group by date_decision

Date_decision来自table2,table1和table2有一个共同的行,即Case_number

但是当它来自双桌时,我无法分组。我试图从 table1 中获取 1 天内的计数除以 table2 中 1 天内的计数。

表1

 Case_number       Date_application
  39123             01-Jan-14
  17724             05-Jan-14
  13455             01-Jan-14
  42314             03-Jan-14
  10485             02-Jan-14
  38762             02-Jan-14
  93974             03-Jan-14
  17388             01-Jan-14
  29384             03-jan-14
  65438             05-Jan-14
  22312             04-Jan-14

表2

CASE_NUMBER     DATE_DECISION
  39123         01-Jan-14
  17724         05-Jan-14
  13455         01-Jan-14
  42314         03-Jan-14
  10485         02-Jan-14
  38762         02-Jan-14
  93974         03-Jan-14

我希望结果是这样的

Date              Ratio
01-JAN-2014       85.84%
02-JAN-2014       75.33%
03-JAN-2014       82.35%
04-JAN-2014       84.93%
...               ...

【问题讨论】:

  • 请提供更多信息,日期来自哪个(或多个)表?表之间有什么共同点可以加入它们。样本数据(每张表)会有很大帮助。考虑设置一个 sqlfiddle sqlfiddle.com
  • 我更新了问题谢谢
  • 也发布您的示例数据
  • 好的开始,不要停止,请提供示例数据。 t1 是“案例”表,t2 是与 t1 的多对一关系吗? (请记住,我们对您的数据一无所知)

标签: sql oracle division


【解决方案1】:

您可能会发现所有日期的两个表格中的病例数比率如下。我猜它效率不高,但它确实有效。

SELECT A.Date_application ALLDATES, ( (A.CNT / B.CNT) * 100) || '%' RATIO
  FROM    (  SELECT t1.Date_application, COUNT (*) CNT
               FROM table1 t1
           GROUP BY t1.Date_application) A
       JOIN
          (  SELECT t2.DATE_DECISION, COUNT (*) CNT
               FROM table2 t2
           GROUP BY t2.DATE_DECISION) B
       ON A.Date_application= B.DATE_DECISION

【讨论】:

  • 对不起,我已经更新了这个问题。 Case_number 由两个表拥有。 Date_decision 归 table2 所有
  • 我根据你在问题中的更新更新了答案。
  • 谢谢!!如果我想按周对结果进行分组怎么办?
  • 不客气。您可以按此日期值的周版本分组,而不是直接按 Date_application 分组。根据您希望如何开始一周,您可以使用以下子句:GROUP BY TRUNC(t1.Date_application)-TO_NUMBER(TO_CHAR(t1.Date_application,'D'))。您还需要更改选择部分中的“A.Date_application ALLDATES”以满足 GROUP BY 中的相同条件。对 t2.DATE_DECISION 执行相同的操作。另见:stackoverflow.com/questions/3524643/…
  • 谢谢!!!有效!!现在我如何找到这两个方面的 7 天加权移动平均线?
【解决方案2】:

您想知道某一天决定的案件数量与申请案件数量的比率吗?

您可以在日期列上加入两个表,按日期分组,计算不同的案例数。把这两个数相除,你就有了你的比例。

SQL Fiddle

  SELECT table1.date_application "date",
         COUNT (DISTINCT table1.case_number) cases_applied,
         COUNT (DISTINCT table2.case_number) cases_decided,
            ROUND (
                 COUNT (DISTINCT table2.case_number)
               * 100
               / COUNT (DISTINCT table1.case_number),
               2)
         || '%'
            percentage_cases_decided
    FROM    table1
         LEFT OUTER JOIN
            table2
         ON table1.date_application = table2.date_decision
GROUP BY table1.date_application
ORDER BY table1.date_application

Results

|                           DATE | CASES_APPLIED | CASES_DECIDED | PERCENTAGE_CASES_DECIDED |
|--------------------------------|---------------|---------------|--------------------------|
| January, 01 2104 00:00:00+0000 |             3 |             2 |                   66.67% |
| January, 02 2104 00:00:00+0000 |             2 |             1 |                      50% |
| January, 03 2104 00:00:00+0000 |             3 |             3 |                     100% |
| January, 04 2104 00:00:00+0000 |             1 |             0 |                       0% |
| January, 05 2104 00:00:00+0000 |             2 |             1 |                      50% |

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 2017-11-30
    • 2016-11-23
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多