Sql 将select转换为存储过程最佳方法

Sql 将select转换为存储过程最佳方法,sql,firebird,Sql,Firebird,我使用此SQL获取每个类型组的计数 select mytype, count(mytype) from types1 group by 1 结果是每种类型有5条记录。我需要将其转换为存储过程;我应该使用For…Select写入上述SQL,还是应该使用Select…Where…将单个值返回到每个类型中5次 我将使用返回计数更新主表,并且类型可能会在将来增加。这取决于您希望从过程中得到什么: 如果希望五行的输出与select相同,请将用于select。对于每种类型和关联的计数,您将得到

我使用此SQL获取每个类型组的计数

select 
    mytype, count(mytype)
from types1
group by 1
结果是每种类型有5条记录。我需要将其转换为存储过程;我应该使用
For…Select
写入上述SQL,还是应该使用
Select…Where…将单个值返回到每个类型中
5次


我将使用返回计数更新主表,并且类型可能会在将来增加。

这取决于您希望从过程中得到什么:

  • 如果希望五行的输出与select相同,请将
    用于select
    。对于每种类型和关联的计数,您将得到一行。这可能是“标准”方法

  • 然而,如果您想要五个输出变量,每种类型的每个计数一个,您可以使用五个查询,形式为
    选择count(1)FROM types1,其中mytype='type1'进入:type1
    。但是要意识到这将是五个查询,最好对SELECT查询执行一个
    ,并在过程中循环返回的行。还要注意,如果在某个时候添加第六种类型,则必须更改此过程以添加其他类型

  • 如果要查询单个类型,还可以执行以下操作,这将在输入参数中返回包含该类型单个计数的单行:

    CREATE PROCEDURE GetTypeCount(
        TypeName VARCHAR(256)
    )
    RETURNS (
        TypeCount INTEGER
    )
    AS
    BEGIN
        SELECT COUNT(1)
        FROM types1
        WHERE mytype = :TypeName
        INTO :TypeCount;
    
        SUSPEND
    END
    

更新了我的问题…..除了对每种类型进行硬编码之外,没有其他方法可以获得计数?@Welliam添加了第三个选项一个问题,请问哪一个更快调用程序5次以返回每种类型的类型计数,还是为…为所有类型执行一次选择?@Welliam我认为一次选择应该更快,因为它只会点击数据库一次。