SQL Master データベースエンジニアとセキュリティエンジニアとLinuxエンジニアのための情報

【SQLドリル002】集計 COUNT関数、サブクエリ

コンピュータ名とそれに対するジョブのステータスが保存されているテーブル、DRILL002がある。

ComputerName????????? JobStatus
————————————-
PC001???????????????? Normal
PC002???????????????? Normal(completed)
PC003???????????????? Error(system)
PC004???????????????? Error
PC005???????????????? Normal(proceeding)
PC006???????????????? Error(setup)
PC007???????????????? Normal

NormalでもNormal(completed)やNormal(proceeding)などがあるが、どれもNormalとして集計したい。また、ErrorもError(setup)やError(system)などがあるが、どれもErrorとして集計したい。
以下のようにNormalとErrorの合計数を求めるにはどのようにすれば良いか。

Normal??????? Error
—————————–
4???????????????????? 3

?

?
MS SQL Serverでの回答案
まず、Normalの合計を求めます。

SELECT COUNT(*) AS ‘Normal’ FROM DRILL002 WHERE JobStatus like ‘Normal%’;

Normal
———————-
4

次に、Errorの合計を求めます。

SELECT COUNT(*) AS ‘Error’ FROM DRILL002 WHERE JobStatus like ‘Error%’;

Error
———————-
3

NormalとErrorの数を1つのクエリで同時に表示させるには、サブクエリを使います。

SELECT
(SELECT COUNT(*) FROM DRILL002
WHERE JobStatus like ‘Normal%’) as ‘Normal’,
(SELECT COUNT(*) FROM DRILL002
WHERE JobStatus like ‘Error%’) as ‘Error’
FROM Drill002;

Normal??????? Error
———————-
4?????????????????? 3
4?????????????????? 3
4?????????????????? 3
4?????????????????? 3
4?????????????????? 3
4?????????????????? 3
4???????????????????3

複数表示されているので、DISTINCTを利用して、見やすくします。

SELECT DISTINCT
(SELECT COUNT(*) FROM DRILL002
WHERE JobStatus like ‘Normal%’) as ‘Normal’,
(SELECT COUNT(*) FROM DRILL002
WHERE JobStatus like ‘Error%’) as ‘Error’
FROM Drill002;

Normal??????????? Error
———————-
4???????????????????3