Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用Oracle时子查询中出现奇数“分组依据”错误_Sql_Oracle_Ora 00979 - Fatal编程技术网

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学位,我仍然对这些东西感到困惑。谢谢你的帮助。