如何在PL/SQL中按Load Id分组计算错误占比及相关统计指标
实现按Load Id统计的SQL方案
假设你的表名为your_table,包含核心字段:Load_Id(分组依据)、Load_Item_Id(需统计的条目ID)、Is_Error(错误标识,比如1代表错误,0代表正常)。以下是通用的SQL实现方案:
基础统计SQL
SELECT Load_Id, COUNT(Load_Item_Id) AS Total_Load_Items, SUM(CASE WHEN Is_Error = 1 THEN 1 ELSE 0 END) AS Error_Count, ROUND( CASE WHEN COUNT(Load_Item_Id) = 0 THEN 0 ELSE SUM(CASE WHEN Is_Error = 1 THEN 1 ELSE 0 END) * 100.0 / COUNT(Load_Item_Id) END, 2 ) AS Error_Percentage FROM your_table GROUP BY Load_Id ORDER BY Load_Id;
代码解释
COUNT(Load_Item_Id):统计每个Load Id下的Load Item Id总数(自动忽略NULL值,如果Load_Item_Id不会为NULL,用COUNT(*)效率更高)。SUM(CASE WHEN Is_Error = 1 THEN 1 ELSE 0 END):统计每个Load Id下的错误条目数,通过CASE语句将错误标识转换为1/0后求和。ROUND(..., 2):将错误百分比保留2位小数,避免数值过长。外层CASE处理总数为0的情况,防止出现除数为0的报错。
适配不同场景的调整
- 如果你的错误标识是文本类型(比如'Error'/'Success'),只需修改CASE条件:
CASE WHEN Error_Status = 'Error' THEN 1 ELSE 0 END。 - 如果需要给百分比添加%符号,可使用字符串拼接(不同数据库语法略有差异):
- MySQL:
CONCAT(ROUND(...), '%') - PostgreSQL:
ROUND(...) || '%' - SQL Server:
CAST(ROUND(...) AS VARCHAR) + '%'
- MySQL:
内容的提问来源于stack exchange,提问作者user2153047
相关产品推荐
相关产品推荐

