簡體   English   中英

COUNT() 返回分組表中的總行數

[英]COUNT() returns the total number of rows in the grouped table

我有兩張桌子:

工作表:

[![在此處輸入圖像描述][1]][1]

FailedReason 表通過以下方式引用到 Job 表:

[![在此處輸入圖像描述][2]][2]

我的目標是根據故障原因計算故障率。

我的期望是得到一個結果,第一列包含failure reason name ,第二列包含所有total number of failed jobstotal number of all jobs (“成功”+“失敗”),第三列包含由原因,第四列包含使用以下公式計算的failure ratio :失敗計數(3 列)/總計數(2 列)* 100。

我的 sql 查詢:

SELECT
  FailedReason.main_reason as "Failure reason",
  COUNT(job.name) AS "Total jobs",
  SUM(CASE WHEN job.status='failed' THEN 1 ELSE 0 END) AS "Total failed jobs",
  SUM(CASE WHEN job.status='failed' THEN 1 ELSE 0 END) / COUNT(job.name) * 100 AS "Failure ratio"
FROM job
LEFT JOIN FailedReason
ON job.id=FailedReason.job_id
GROUP BY 1
ORDER BY 3 DESC

我得到的結果是計算聚合表中的作業總數。 結果,失敗率是百分之一百。

[![在此處輸入圖像描述][3]][3]

我應該修改什么以獲得正確的作業數量(“成功”+“失敗”)並計算正確的比率值

樣本數據:

CREATE TABLE failedreason (id INT PRIMARY KEY AUTO_INCREMENT,
                  job_id INT REFERENCES job(id),
                  main_reason varchar(255)
                 );



INSERT INTO failedreason (job_id, main_reason) VALUES (13095427, 'test case failure'),
                                    (13095407, 'test case failure'),
                                    (13095533, 'connection error'),
                                    (13095546, 'connection error'),
                                    (13098367, 'runner connection error'),
                                    (13101522, 'script error');

CREATE TABLE job (id INT PRIMARY KEY,
                  created_at date,
                  finished_at date,
                  status varchar(255)
                 );
INSERT INTO job (id,
                  created_at ,
                  finished_at ,
                  status
                 )
VALUES (13095427,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'failed'),
       (13095407,  '2021-05-03 02:50:39', '2021-05-03 03:46:41', 'failed'),
       (13095533,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'failed'),
       (13095546,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'failed'),
       (13098367,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'failed'),
       (13101522,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'failed');
       (13101444,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'success');
       (13101445,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'success');
       (13101446,  '2021-05-03 02:50:41', '2021-05-03 03:47:27', 'success');



  [1]: https://i.stack.imgur.com/CYnPg.png
  [2]: https://i.stack.imgur.com/t3baS.png
  [3]: https://i.stack.imgur.com/LC7Hp.png

計算唯一的作業,而不是鏈接的失敗原因

SELECT
  FailedReason.main_reason as "Failure reason",
  COUNT(DISTINCT job.id) AS "Total jobs",
  COUNT(DISTINCT CASE WHEN job.status='failed' THEN job.id END) AS "Total failed jobs",
  COUNT(DISTINCT CASE WHEN job.status='failed' THEN job.id END) / COUNT(DISTINCT job.id) * 100 AS "Failure ratio"
FROM job
LEFT JOIN FailedReason
ON job.id = FailedReason.job_id
GROUP BY FailedReason.main_reason
ORDER BY 3 DESC

測試以下查詢

SELECT
  FailedReason.main_reason as "Failure reason",
  SUM(CASE WHEN job.status='success' THEN 1 ELSE 0 END) + SUM(CASE WHEN job.status='failed' THEN 1 ELSE 0 END) AS "Total jobs",
  SUM(CASE WHEN job.status='failed' THEN 1 ELSE 0 END) AS "Total failed jobs",
  SUM(CASE WHEN job.status='failed' THEN 1 ELSE 0 END) / COUNT(job.name) * 100 AS "Failure ratio"
FROM job
LEFT JOIN FailedReason
ON job.id=FailedReason.job_id
GROUP BY 1
ORDER BY 3 DESC

您的查詢未給出正確的總數,因此 % 不正確。

請試試這個

select reason, alltotal, failed,
    failedtotal,
    cast( (100.00 * failed /failedtotal) as numeric(10,2)) failedRatio , 
    cast( (100.00 * failed /alltotal) as numeric(10,2)) failedPercent from 
    (SELECT
      FailedReason.[main_reason] reason,
      MAX(tots.total_jobs)  alltotal,
      MAX(ftots.total_failed)  failedtotal,
      COUNT(DISTINCT CASE WHEN job.status='failed' THEN job.id END) failed
    FROM job, FailedReason,
    (SELECT COUNT(*) AS total_failed FROM FailedReason) ftots , 
    (SELECT COUNT(*) AS total_jobs FROM job) tots
     where job.id = FailedReason.job_id 
    GROUP BY FailedReason.[main_reason]) finaltable

共享樣本查詢數據的結果

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM