Sql 在不使用内置计数(*)函数的情况下进行计数

Sql 在不使用内置计数(*)函数的情况下进行计数,sql,oracle,Sql,Oracle,如果不使用内置的COUNT函数,如何根据条件对表中的字段进行计数?有办法做到这一点吗 要求如下: 创建一个名为findtotalcarmodels的PL/SQL函数来返回总数 属于特定车型的汽车数量。该函数应该有一个 在参数中作为模型名称。然后应该使用显式游标来计算 属于该车型的汽车数量,并返回最终计数。你不能 使用任何隐式游标、表联接、子查询、集合运算符、组函数或SQL 用于创建此函数的函数(如COUNT)。SUM(1或0结束时的情况) SUM(CASE WHEN <condition

如果不使用内置的
COUNT
函数,如何根据条件对表中的字段进行计数?有办法做到这一点吗

要求如下:

创建一个名为findtotalcarmodels的PL/SQL函数来返回总数 属于特定车型的汽车数量。该函数应该有一个 在参数中作为模型名称。然后应该使用显式游标来计算 属于该车型的汽车数量,并返回最终计数。你不能 使用任何隐式游标、表联接、子查询、集合运算符、组函数或SQL 用于创建此函数的函数(如COUNT)。

SUM(1或0结束时的情况)
SUM(CASE WHEN <condition on your fields> THEN 1 ELSE 0 END)
求和(1或0结束时的情况)
求和(1或0结束时的情况)
求和(1或0结束时的情况)

这可能是我写的最愚蠢的答案。业内没有人像这样工作

答案如下:

CREATE OR REPLACE FUNCTION findtotalcarmodels
( model_name IN VARCHAR2)
IS
    CURSOR mycur IS
        SELECT model_name_col FROM car_table;
    mycount INTEGER := 0;
    current_model_name VARCHAR2(10);
BEGIN
    OPEN mycur;
    FETCH mycur INTO current_model_name;
    WHILE mycur%FOUND LOOP
        IF current_model_name = model_name THEN
            mycount := mycount + 1;
        END IF;
        FETCH mycur INTO current_model_name;
    END LOOP;
    CLOSE mycur;
    dbms_output.put_line('The count is ' || mycount);
END;
/

这可能是我写的最愚蠢的回答。业内没有人像这样工作

答案如下:

CREATE OR REPLACE FUNCTION findtotalcarmodels
( model_name IN VARCHAR2)
IS
    CURSOR mycur IS
        SELECT model_name_col FROM car_table;
    mycount INTEGER := 0;
    current_model_name VARCHAR2(10);
BEGIN
    OPEN mycur;
    FETCH mycur INTO current_model_name;
    WHILE mycur%FOUND LOOP
        IF current_model_name = model_name THEN
            mycount := mycount + 1;
        END IF;
        FETCH mycur INTO current_model_name;
    END LOOP;
    CLOSE mycur;
    dbms_output.put_line('The count is ' || mycount);
END;
/

这可能是我写的最愚蠢的回答。业内没有人像这样工作

答案如下:

CREATE OR REPLACE FUNCTION findtotalcarmodels
( model_name IN VARCHAR2)
IS
    CURSOR mycur IS
        SELECT model_name_col FROM car_table;
    mycount INTEGER := 0;
    current_model_name VARCHAR2(10);
BEGIN
    OPEN mycur;
    FETCH mycur INTO current_model_name;
    WHILE mycur%FOUND LOOP
        IF current_model_name = model_name THEN
            mycount := mycount + 1;
        END IF;
        FETCH mycur INTO current_model_name;
    END LOOP;
    CLOSE mycur;
    dbms_output.put_line('The count is ' || mycount);
END;
/

这可能是我写的最愚蠢的回答。业内没有人像这样工作

答案如下:

CREATE OR REPLACE FUNCTION findtotalcarmodels
( model_name IN VARCHAR2)
IS
    CURSOR mycur IS
        SELECT model_name_col FROM car_table;
    mycount INTEGER := 0;
    current_model_name VARCHAR2(10);
BEGIN
    OPEN mycur;
    FETCH mycur INTO current_model_name;
    WHILE mycur%FOUND LOOP
        IF current_model_name = model_name THEN
            mycount := mycount + 1;
        END IF;
        FETCH mycur INTO current_model_name;
    END LOOP;
    CLOSE mycur;
    dbms_output.put_line('The count is ' || mycount);
END;
/

DCOUNT
需要更多的爱这只是一个学术练习,还是你有这样做的理由?学术。从专业角度来说,我不会这么做。
DCOUNT
需要更多的爱这只是一个学术练习,还是你有理由这么做?学术。从专业角度来说,我不会这么做。
DCOUNT
需要更多的爱这只是一个学术练习,还是你有理由这么做?学术。从专业角度来说,我不会这么做。
DCOUNT
需要更多的爱这只是一个学术练习,还是你有理由这么做?学术。从专业角度来说,我不会这么做。