如何根据Oracle中的Case语句使用Group By?

Jon*_*nas 10 sql oracle group-by case

我有一个SQL查询,我使用Oracle CASE来比较日期列是否小于大于当前日期.但是如何在CASE-statement中使用该GROUP BY-statement?我想在每种情况下统计记录.

例如

select
    (case
        when exp_date > sysdate then 1
        when exp_date <= sysdate then 2
        else 3
     end) expired, count(*)
from mytable
group by expired
Run Code Online (Sandbox Code Playgroud)

但是我在尝试时遇到错误:ORA-00904.有什么建议?

pau*_*aul 14

select
(case
    when exp_date > sysdate then 1
    when exp_date <= sysdate then 2
    else 3
 end) expired, count(*)
from mytable
group by (case
    when exp_date > sysdate then 1
    when exp_date <= sysdate then 2
    else 3
 end)
Run Code Online (Sandbox Code Playgroud)


Oll*_*lie 12

使用内联视图:

SELECT expired,
       count(*)
  FROM (SELECT (CASE
                   WHEN exp_date > SYSDATE THEN 1
                   WHEN exp_date <= SYSDATE THEN 2
                   ELSE 3
                 END) AS expired
          FROM mytable)
GROUP BY expired;
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你...