3

これは現在のクエリです。

SELECT status.ct_reconcile_status, 
       IFNULL(COUNT(status.ct_reconcile_status), 0) AS sch_change_status_num 
FROM   db_crewops_cm_action status 
WHERE  status.ct_reconcile_status IN ( 'SUCCESS', 'FAILED' ) 
       AND status.updated_ts > UTC_TIMESTAMP() - INTERVAL 60 minute 
GROUP  BY status.ct_reconcile_status; 

そして、私が取得したい結果は次のようになります。

SUCCESS   5
FAILED    9

それは大丈夫です。問題は、結果の数が両方のステータスで 0 の場合があり、その場合は次のようにすることです。

SUCCESS   0
FAILED    0

空の結果セットではありません(私が今得たもの)。テーブル自体を結合するか、WITH 句を使用する必要があるという一般的な考えがありますが、それを開始する方法がわかりません。

4

1 に答える 1

3

次のようなものを試してください:

SELECT a.status AS ct_reconcile_status,
       (IFNULL(b.sch_change_status_num,0) + a.num) AS sch_change_status_num
FROM
  (SELECT 'SUCCESS' AS status, 0 AS num
   UNION
   SELECT 'FAILED', 0) a
LEFT JOIN
  (SELECT status.ct_reconcile_status, 
          COUNT(status.ct_reconcile_status) AS sch_change_status_num 
   FROM   db_crewops_cm_action status 
   WHERE  status.ct_reconcile_status IN ( 'SUCCESS', 'FAILED' ) 
          AND status.updated_ts > UTC_TIMESTAMP() - INTERVAL 60 minute 
   GROUP  BY status.ct_reconcile_status) b
ON a.status = b.ct_reconcile_status

を削除することはstatus.ct_reconcile_status IN ( 'SUCCESS', 'FAILED' ) ANDできますが、これは遅くなる可能性があります。

于 2013-02-01T11:08:16.723 に答える