Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SELECT文のSELECT句の理解を深める

 SELECT文のSELECT句の理解を深める

非エンジニア向けに社内勉強会として解説した際に使用した資料です

Avatar for kou-line-row

kou-line-row

December 25, 2019

Other Decks in Programming

Transcript

  1. SELECT COUNT(*) AS 件数, SUM(bmi) AS BMI合 計, AVG(bmi) AS

    BMI平均,MAX(bmi) AS 最大BMI, MIN(bmi) AS 最小BMI FROM 従業員テーブル; 使ってみる
  2. ?

  3. SELECT 性別, COUNT(*) AS 件数 FROM 従業員テーブル GROUP BY 性別;

    性別で集約したい、なのでGROUP BY句を定義
  4. SELECT 年齢, CASE WHEN 年齢 < 10 THEN '10代未満' WHEN

    年齢 < 20 THEN '10代' WHEN 年齢 < 30 THEN '20代' ELSE '30代以降' END AS 年代 FROM 従業員テーブル; 条件分岐で加工してみる
  5. SELECT 年齢, CASE WHEN 年齢 < 10 THEN '10代未満' WHEN

    年齢 < 20 THEN '10代' WHEN 年齢 < 30 THEN '20代' ELSE '30代以降' END AS 年代 FROM 従業員テーブル; 条件分岐で加工してみる この年代って 新たな集約の起点として使えるんじゃね?
  6. SELECT CASE WHEN 年齢 < 10 THEN '10代未満' WHEN 年齢

    < 20 THEN '10代' WHEN 年齢 < 30 THEN '20代' ELSE '30代以降' END AS 年代, AVG(bmi) AS BMI平均 FROM 従業員テーブル GROUP BY 年代; 年代で集計してみる
  7. SELECT 名前, bmi, (SELECT AVG(bmi) FROM 従業員テーブル) AS 平均値 FROM

    従業員テーブル; 副問合せを使ってみる
  8. SELECT 名前, bmi, (SELECT AVG(bmi) FROM 従業員テーブル) AS 平均値 FROM

    従業員テーブル; 副問合せを使ってみる 平均値に入る数値は全部同じになるから微妙 集約結果を使って求めたい 内容をSQLに書こ!!
  9. SELECT 名前, bmi, bmi > (SELECT AVG(bmi) FROM 従業員テーブル) AS

    平均値より上? FROM 従業員テーブル; 各人のBMIが平均値を上回っているかを判定す る
  10. SELECT 名前, bmi, CASE WHEN bmi > (SELECT AVG(bmi) FROM

    従業員テーブル) THEN '平均値より上!' ELSE '' END AS 判定 FROM 従業員テーブル; 見やすくしよう