如何在 ORACLE 上将计数作为 IF 条件传递
Posted
技术标签:
【中文标题】如何在 ORACLE 上将计数作为 IF 条件传递【英文标题】:How to pass a count as IF condition on ORACLE 【发布时间】:2018-12-18 19:51:38 【问题描述】:我想在 ORACLE 上使用 COUNT 结果作为 IF CONDITION,就像 oracle 上的这个伪代码:
select count(d.number_people) as counted_people
from dual d
if counted_people = 1 then
dbms_output.put_line('Have just one people on this column.'
end if;
这个语法是错误的,我知道,我该怎么做?
【问题讨论】:
DUAL 是一个特殊的单行一列的表,它没有number_people
列,使用@987654325 不清楚你想从这个表中统计多少人@ ?
举个例子,问题是如何使用count as if语句
if (select count(column) from table) > 0 then的可能重复
【参考方案1】:
使用SELECT ... INTO variable ...
演示:https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=610d02797857539be5fcd4afdbd7d9e6
DECLARE
cnt number;
BEGIN
select count(*) INTO cnt from dual;
IF cnt = 1 THEN
DBMS_OUTPUT.PUT_LINE('Exaclty one record');
ELSE
DBMS_OUTPUT.PUT_LINE('0 or more than 1 record');
END IF;
END;
/
【讨论】:
【参考方案2】:COUNT
是一个聚合结果。您可以对表中的所有行、符合特定条件的所有行等进行计数。作为聚合结果,您可以在SELECT
子句、HAVING
子句和ORDER BY
子句中使用它。 (您不能在WHERE
子句中使用它,因为WHERE
子句处理表行中的数据。您需要一个HAVING
子句来处理聚合结果。)
SELECT 子句/ORDER BY 子句示例
select
supplier_id,
case when count(*) < 20 then 'less then 20 orders'
when count(*) < 40 then 'less beteen 20 and 40 orders'
else '40 or more orders'
end as number_of_orders
from orders
where order_date >= date '2018-01-01'
group by supplier_id
order by count(*) desc;
HAVING 子句示例
select sex, count(*)
from members
group by sex
having count(*) > 20;
【讨论】:
我从 v4 (1985) 开始一直在做 Oracle,这是我第一次看到这个 group by 条款。 我的评论应该是个玩笑,因为您分组的特定列。 @Roger Cornejo:啊,抱歉。是的,我必须承认,在输入查询时,我想知道GROUP BY
中的BY
是否是可选的;-)
:-)) 好笑:-))以上是关于如何在 ORACLE 上将计数作为 IF 条件传递的主要内容,如果未能解决你的问题,请参考以下文章