Sql 使用Oracle时子查询中出现奇数“分组依据”错误
一个快速的背景-我需要找到通过我们公司实验室按案例类型和月份分组的案例终止率。到目前为止,我得出了以下结论:Sql 使用Oracle时子查询中出现奇数“分组依据”错误,sql,oracle,ora-00979,Sql,Oracle,Ora 00979,一个快速的背景-我需要找到通过我们公司实验室按案例类型和月份分组的案例终止率。到目前为止,我得出了以下结论: 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
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 GROUP BY表达式错误,并从子查询中突出显示BPI.TYPE
有人知道我的错误到底是什么吗?此外,分析函数在这里是否比聚合函数更有效?因此,您需要两个计数:一个是当月所有案例的总数,另一个是仅术语案例的总数。最简单的方法是使用CASE函数执行条件计数,如下所示:
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
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筛选器。因此,您需要两个计数:一个是本月所有案例的总数,另一个是仅术语案例的总数。最简单的方法是使用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筛选器。您需要按BPI_1.TYPE在子查询中分组select子句中的BPI.TYPE是否真的应该是BPI.TUMOR_类型,就像您在group by中一样?抱歉,它只是类型。肿瘤类型是完全不同的-弗洛伊德类型你需要按BPI_1分组。子查询中的类型是select子句中的BPI.type真的应该是BPI.Tumor_类型,就像你在分组中的类型一样?对不起,这只是类型。肿瘤类型是一个完全不同的东西-一个弗洛伊德式的分类法,这两个计数是一个除以另一个,这正是我需要的答案。天哪,即使拿到了CS学位,我仍然对这些东西感到困惑。谢谢你的帮助。这两个数是一除以另一,这正是我需要的答案。天哪,即使拿到了CS学位,我仍然对这些东西感到困惑。谢谢你的帮助。