2017-08-17 17 views
1

私は1日の重要な警告の合計数を返すことを望んでいますが、その問題の重要な警告を追加しています。日付が指定された私はこのことについて行くことができる方法上の任意のヘルプを単一のクエリで複数のCountを使用する

SELECT alertDate as "Alert Date", 
    (SELECT COUNT(alertType) FROM alerts WHERE alertDate BETWEEN '2016/02/15' AND '2016/02/16' AND UPPER(alertType)='CRITICAL') as Critical, 
    (SELECT COUNT(alertType) FROM alerts WHERE alertDate BETWEEN '2016/02/15' AND '2016/02/16' AND UPPER(alertType)='WARNING') as Warning 
FROM alerts 
where alertDate BETWEEN '2016/02/15' AND '2016/02/16' 
GROUP BY alertDate; 

は、上記のコードを試みたが、どうやら私は問題だと思うのサブクエリ内の句、「によってグループ」を追加することはできません、してください。 ..

+0

のような条件のカウントを使用する必要がありますか? –

+0

MySQL **または** SQL Serverのどちらかを選択できますか?それらはどちらも非常に異なっています... – DavidG

+0

互換性のないデータベースタグを削除しました。実際に使用しているデータベースにタグを付けてください。 –

答えて

2

条件付き集計が必要です - caseは集計関数内に入ります。

SELECT alertDate as AlertDate, 
     SUM(UPPER(alertType) = 'CRITICAL') as Critical, 
     SUM(UPPER(alertType) = 'WARNING') as Warning 
FROM alerts a 
WHERE alertDate BETWEEN '2016-02-15' AND '2016-02-16' 
GROUP BY alertDate; 

注カップルその他の変更:

  • ませ副問い合わせは必要ありませんが、あなたがMySQLを使用している場合、あなたはこれを短絡することができます

    SELECT alertDate as AlertDate, 
         SUM(CASE WHEN UPPER(alertType) = 'CRITICAL' THEN 1 ELSE 0 END) as Critical, 
         SUM(CASE WHEN UPPER(alertType) = 'WARNING' THEN 1 ELSE 0 END) as WARNING 
    FROM alerts a 
    WHERE alertDate BETWEEN '2016-02-15' AND '2016-02-16' 
    GROUP BY alertDate; 
    

    :私はこれを書くでしょう。

  • AlertDateからスペースを削除しました。私はエスケープする必要がある列別名のファンではありません。
  • 日付リテラルで/-に置き換えました。ハイフンはISO 8601と互換性があります。
+0

ありがとうございました... – Rex

2

この場合、合計(大文字)を使用できます。

SELECT alertDate as "Alert Date", 
    sum(case when UPPER(alertType)='CRITICAL' then 1 end) as Critical, 
    sum(case when UPPER(alertType)='WARNING' then 1 end) as Warning 
FROM alerts 
where alertDate BETWEEN '2016/02/15' AND '2016/02/16' 
GROUP BY alertDate; 
+0

これは魅力的なように働いてくれてありがとう... – Rex

0

あなたはおそらくあなたがあなたのクエリによって対処されていないいくつかの予想される結果をご提供してください可能性が

SUM(case when alertDate BETWEEN '2016/02/15' AND '2016/02/16' 
    AND UPPER(alertType)='CRITICAL' then 1 else 0 end) as Critical, 
関連する問題