1

簡単な背景-ケースの種類と月ごとにグループ化された、当社のラボを通過するケースの終了率を見つける必要があります。これまでのところ、私はこれを思いついた:

SELECT BPI.TYPE,
       EXTRACT(MONTH FROM CS.RECEIVED_DATE) MONTH,
       COUNT(*) termed_cases
  FROM CELL_SOURCE cs
  JOIN BASIC_PATHOLOGY_INFO bpi ON CS.CELL_SOURCE_ID = BPI.CELL_SOURCE_ID
  JOIN RECENT_CELL_SOURCE_STATUS rcss ON CS.CELL_SOURCE_ID = RCSS.CELL_SOURCE_ID
 WHERE type IS NOT NULL
  AND CS.RECEIVED_DATE > to_date('03/01/2011', 'MM/DD/YYYY/')
  AND RCSS.STATUS like 'Term%'
GROUP BY BPI.TYPE, EXTRACT(MONTH FROM CS.RECEIVED_DATE)
ORDER BY month, type

これにより、名前が付けられたすべてのケースが簡単に見つかります。しかし、レートを知りたいときは少し問題があります。サブクエリを使用して、ステータスに関係なく、タイプごとのケースの総数を取得しようとしました。

COUNT(*)/(SELECT COUNT(*) 
            FROM CELL_SOURCE cs_1 
            JOIN BASIC_PATHOLOGY_INFO bpi_1 ON CS_1.CELL_SOURCE_ID = BPI_1.CELL_SOURCE_ID
          WHERE BPI_1.TYPE = BPI.TYPE 
            AND EXTRACT(month from CS_1.RECEIVED_DATE) = EXTRACT(MONTH FROM CS.RECEIVED_DATE)) termed_cases

ただし、これはORA-00979: not a GROUP BY expressionエラーをスローし、サブクエリBPI.TYPEから強調表示されます。

誰かが私のエラーが実際に何である可能性があるかについて何か考えがありますか?また、分析関数は集計関数よりもここでうまく機能しますか?

4

2 に答える 2

4

そのため、その月のすべてのケースの合計と期間中のケースのみの合計の 2 つのカウントが必要です。これを行う最も簡単な方法は、次のように CASE() 関数を使用して条件付きカウントを実行することです。

SELECT BPI.TYPE,
       EXTRACT(MONTH FROM CS.RECEIVED_DATE) MONTH,
       COUNT(*) all_cases,
       sum(case when RCSS.STATUS like 'Term%' then 1 else 0 end ) termed_cases
  FROM CELL_SOURCE cs
  JOIN BASIC_PATHOLOGY_INFO bpi ON CS.CELL_SOURCE_ID = BPI.CELL_SOURCE_ID
  JOIN RECENT_CELL_SOURCE_STATUS rcss ON CS.CELL_SOURCE_ID = RCSS.CELL_SOURCE_ID
 WHERE tumor_type IS NOT NULL
  AND CS.RECEIVED_DATE > to_date('03/01/2011', 'MM/DD/YYYY/')
GROUP BY BPI.TUMOR_TYPE, EXTRACT(MONTH FROM CS.RECEIVED_DATE)
ORDER BY month, tumor_type

WHERE 句から LIKE フィルターを削除したことに注意してください。

于 2011-05-26T14:53:00.627 に答える
0
select bpi.type , month, 
       termed_cases / 
   (select count(*) 
    from CELL_SOURCE cs_1 
    inner join BASIC_PATHOLOGY_INFO bpi_1 
        on CS_1.CELL_SOURCE_ID = BPI_1.CELL_SOURCE_ID
    where BPI_1.TUMOR_TYPE = BPI.TUMOR_TYPE 
    and extract(month from CS_1.RECEIVED_DATE) = extract(MONTH FROM CS.RECEIVED_DATE)
    )
from (
select BPI.TYPE,
extract(MONTH FROM CS.RECEIVED_DATE) MONTH,
count(*) termed_cases
from CELL_SOURCE cs
inner join BASIC_PATHOLOGY_INFO bpi
    on CS.CELL_SOURCE_ID = BPI.CELL_SOURCE_ID
inner join RECENT_CELL_SOURCE_STATUS rcss
    on CS.CELL_SOURCE_ID = RCSS.CELL_SOURCE_ID
where tumor_type is not null
and CS.RECEIVED_DATE > to_date('03/01/2011', 'MM/DD/YYYY/')
and RCSS.STATUS like 'Term%'
group by BPI.TYPE, extract(MONTH FROM CS.RECEIVED_DATE)
)
order by month, type
于 2011-05-26T14:50:27.980 に答える