【问题标题】:"Not a Group by Expression" Oracle SQL Statement“不是按表达式分组”Oracle SQL 语句
【发布时间】:2018-05-15 20:33:57
【问题描述】:

我正在尝试运行以下代码,但我不断收到 Not a Group by Expression 错误。我做了一些研究,发现我需要添加我所做的“分组依据”,但我不确定我做错了什么?

我在test_flag 中寻找medicaid_no1 的列表,如果它们的计数为more > 0 并且In_Op 等于inpatient

如果您看到下面的第 1、2 和 4 行满足条件 count > 0 并且拥有 Inpatient 而其他人不满足条件,那么他们将获得 0

Row MEDICAID_NO TEST_FLAG
1   999999         1
2   1111111        1
3   3333333        0
4   444444         1
5   88888888       0

这是我的代码

SELECT medicaid_no, count(*)
,(CASE WHEN count(*)>0 and In_Op IN('Inpatient')
THEN 1 ELSE 0 END) AS test_FLAG
FROM top_member_claims 
GROUP BY medicaid_no

【问题讨论】:

  • 抱歉,您的示例数据不包括住院患者列。
  • 该列位于另一个名为 top_member_claims 的 CTE 中
  • count(*) 总是 > 0,所以测试它没有真正的意义......

标签: sql oracle count case


【解决方案1】:

似乎top_member_claims 表中有一个名为In_Op 的列,应该在

Group By 表达式为Group By medicaid_no, In_Op

所以,使用:

CREATE TABLE top_member_claims
(
  row_   int,
  MEDICAID_NO    int,
  TEST_FLAG int,
  In_Op varchar2(50)
);

INSERT INTO top_member_claims VALUES (1, 999999, 1, 'Inpatient');

SELECT medicaid_no, count(*),
      (CASE WHEN count(*)>0 and In_Op IN('Inpatient')
            THEN 1 
            ELSE 0 
       END) AS test_FLAG
 FROM top_member_claims 
GROUP BY medicaid_no, In_Op;

MEDICAID_NO COUNT(*)    TEST_FLAG
  999999       1            1
  3333333      1            1
  1111111      1            0
  444444       1            0
  88888888     1            1

但不要使用

SELECT medicaid_no, count(*),
      (CASE WHEN count(*)>0 and In_Op IN('Inpatient')
            THEN 1 
            ELSE 0 
       END) AS test_FLAG
 FROM top_member_claims 
GROUP BY medicaid_no; -- yields below

ORA-00979: not a GROUP BY expression

SQL Fiddle Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多