SQL Caseの使い方
15435 ワード
Caseは二種類のフォーマットを持っている。簡単なCase関数とCase検索関数。
もう一つの注意すべき問題があります。Case関数は最初の該当条件の値だけを返します。残りのCase部分は自動的に無視されます。
一つは、既知のデータを別の方法でグループ化し、分析することである。
次のようなデータがあります。
国家(country)
人口(population)
中国
600
米国
100
カナダ
100
イギリス
200
フランス
300
日本
250
ドイツ
200
メキシコ
50
インド
250
この国の人口データに基づいて、アジアと北アメリカ大陸の人口を統計します。次のような結果を得るべきです。
州
人口
アジア
1100
北アメリカ大陸
250
その他
700
この問題を解決したいですが、どうしますか?州のCodeを持つViewを生成するのは解決法ですが、統計の仕方を動的に変えるのは難しいです。
Case関数を使用すると、SQLコードは以下の通りです。
次のようなデータがあります
国家(country)
性別(sex)
人口(population)
中国
1
340
中国
2
260
米国
1
45
米国
2
55
カナダ
1
51
カナダ
2
49
イギリス
1
40
イギリス
2
60
国と性別によってグループ化した結果、次のようになりました。
国家
男の人
女の人
中国
340
260
米国
45
55
カナダ
51
49
イギリス
40
60
一般的には、UNIONでも一つの文で照会することができます。しかし、そのように消費が増加し、SQL文が長くなります。
次はCase関数でこの機能を完成させる例です。
三,CheckでCase関数を使用する。
CheckでCase関数を使用することは、多くの場合、非常に良い解決法である。もともとCheckを使わない人が多いかもしれませんが、次の例を見てからもSQLでCheckを使ってみてください。
次に例をあげます。
会社Aでは、この会社は女性の給料が1000元以上であるという決まりがあります。CheckとCaseで表現すれば、次のようになります。
-- Case
CASE sex
WHEN '1' THEN ' '
WHEN '2' THEN ' '
ELSE ' ' END
--Case
CASE WHEN sex = '1' THEN ' '
WHEN sex = '2' THEN ' '
ELSE ' ' END
この2つの方法は、同じ機能を実現することができます。簡単なCase関数の書き方は比較的簡潔ですが、Case検索関数と比較して、機能の面では判定式を書くなど制限があります。 もう一つの注意すべき問題があります。Case関数は最初の該当条件の値だけを返します。残りのCase部分は自動的に無視されます。
-- , SQL, “ ”
CASE WHEN col_1 IN ( 'a', 'b') THEN ' '
WHEN col_1 IN ('a') THEN ' '
ELSE' ' END
次に、Case関数を使って、どんなことができますか? 一つは、既知のデータを別の方法でグループ化し、分析することである。
次のようなデータがあります。
国家(country)
人口(population)
中国
600
米国
100
カナダ
100
イギリス
200
フランス
300
日本
250
ドイツ
200
メキシコ
50
インド
250
この国の人口データに基づいて、アジアと北アメリカ大陸の人口を統計します。次のような結果を得るべきです。
州
人口
アジア
1100
北アメリカ大陸
250
その他
700
この問題を解決したいですが、どうしますか?州のCodeを持つViewを生成するのは解決法ですが、統計の仕方を動的に変えるのは難しいです。
Case関数を使用すると、SQLコードは以下の通りです。
SELECT SUM(population),
CASE country
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
ELSE ' ' END
FROM Table_A
GROUP BY CASE country
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
WHEN ' ' THEN ' '
ELSE ' ' END;
同じように、私達もこの方法で給料の等級を判断して、各等級の人数を統計することができます。SQLコードは以下の通りです SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class,
COUNT(*)
FROM Table_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END;
一つのSQL文で異なる条件のパケットを完成する。次のようなデータがあります
国家(country)
性別(sex)
人口(population)
中国
1
340
中国
2
260
米国
1
45
米国
2
55
カナダ
1
51
カナダ
2
49
イギリス
1
40
イギリス
2
60
国と性別によってグループ化した結果、次のようになりました。
国家
男の人
女の人
中国
340
260
米国
45
55
カナダ
51
49
イギリス
40
60
一般的には、UNIONでも一つの文で照会することができます。しかし、そのように消費が増加し、SQL文が長くなります。
次はCase関数でこの機能を完成させる例です。
SELECT country,
SUM( CASE WHEN sex = '1' THEN
population ELSE 0 END), --
SUM( CASE WHEN sex = '2' THEN
population ELSE 0 END) --
FROM Table_A
GROUP BY country;
このように,Selectを用いて,二次元表への出力形態を完成し,Case関数の強さを十分に示した。 三,CheckでCase関数を使用する。
CheckでCase関数を使用することは、多くの場合、非常に良い解決法である。もともとCheckを使わない人が多いかもしれませんが、次の例を見てからもSQLでCheckを使ってみてください。
次に例をあげます。
会社Aでは、この会社は女性の給料が1000元以上であるという決まりがあります。CheckとCaseで表現すれば、次のようになります。
CONSTRAINT check_salary CHECK
( CASE WHEN sex = '2'
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 1 END = 1 )
Checkを単純に使うなら、以下のようになります。 CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )
女子社員の条件は合っていますが、男性社員は入力できません。