【发布时间】:2011-09-02 16:23:16
【问题描述】:
简要介绍一下背景——我需要找到通过我们公司实验室的案例的终止率,这些案例按案例类型和月份分组。到目前为止,我想出了这个:
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。
有人知道我的错误实际上是什么吗?另外,分析函数在这里会比聚合函数更好吗?
【问题讨论】:
-
您需要在子查询中按 BPI_1.TYPE 分组
-
select 子句中的“BPI.TYPE”真的应该是“BPI.TUMOR_TYPE”吗,就像您在 group by 中一样?
-
对不起,只是输入。肿瘤类型完全不同——弗洛伊德的错别字