データベース - SELECT文入門2

Preview:

Citation preview

第17週 データの集計データベース

2011年10月13日木曜日

タイムテーブル

• 5-5 データを使って集計する• P214 ~ P224•日付の扱い•評価課題

2011年10月13日木曜日

P214 データの計算• SELECT句のフィールドに計算式が書ける• SELECT 商品番号,商品名,単価,単価*0.8 FROM 商品

SELECT句select 商品番号,商品名,単価,単価*0.8

単価*0.8で8掛けの値を表示

FROM句 商品データベースを指定

2011年10月13日木曜日

P216 レコード数• count 関数を使ってレコード数を計算• SELECT count(*) FROM 名簿

SELECT句select count(*)

レコードの数を数える

FROM句 名簿データベースを指定

2011年10月13日木曜日

count(フィールド名)• count 関数の引数には*だけでなくフィールドが指定できる

• SELECT count(血液型) FROM 名簿

SELECT句select count(血液型)

血液型フィールドがNULLの以外のレコード数を数える

FROM句 名簿データベースを指定

2011年10月13日木曜日

P217 抽出したレコード数

• WHERE句を追加すればレコードを絞りこんでからレコード数を数えられる

• SELECT count(血液型) FROM 名簿 WHERE 性別 = ’女’

SELECT句 select count(血液型)血液型フィールドがNULLの以外のレコード数を数える

FROM句 名簿データベースを指定

WHERE句 条件文 「性別 = ’女’」 で性別フィールドの値が「女」のレコードを抽出

2011年10月13日木曜日

P217 重複を取り除いたレコード数

• count関数の引数に “DISTINCT”を追加• SELECT count(DISTINCT 血液型) FROM 名簿

SELECT句select count(distinct 血液型)

血液型フィールドがNULLの以外で、かつ、重複を取り除いたレコード数を数える

FROM句 名簿データベースを指定

2011年10月13日木曜日

P218 集計関数AVG(フィールド名) 平均

COUNT(フィールド名) レコード数

MAX(フィールド名) 最大値

MIN(フィールド名) 最小値

SUM(フィールド名) 合計

2011年10月13日木曜日

AVG(フィールド名)SELECT AVG(tanisu) FROM gakusei

SELECT句select avg(tanisu)

単位数フィールドの値の平均を求める

FROM句 gakusei データベースを指定

2011年10月13日木曜日

MAX(フィールド名)SELECT MAX(tanisu) FROM gakusei

SELECT句select max(tanisu)

単位数フィールドの最大値を求める

FROM句 gakusei データベースを指定

2011年10月13日木曜日

MIN(フィールド名)SELECT MIN(tanisu) FROM gakusei

SELECT句select min(tanisu)

単位数フィールドの最小値を求める

FROM句 gakusei データベースを指定

2011年10月13日木曜日

SELECT MAX(tanisu) - MIN(tanisu) FROM gakusei

もっとも単位数の最大値から最小値を引いた値を求める

2011年10月13日木曜日

SUM(フィールド名)SELECT SUM(tanisu) FROM gakusei

SELECT句select sum(tanisu)

単位数フィールドの値の合計を求める

FROM句 gakusei データベースを指定

2011年10月13日木曜日

P220 グループ毎の集計

•血液型ごと•性別ごと•出身地ごとといったフィールドの単位でレコードを

一旦まとめてから集計をおこなうことができる

2011年10月13日木曜日

そのためにはGROUP BY 句

を使う(P221 図1)

2011年10月13日木曜日

SELECT 血液型,count(*)  FROM 名簿 GROUP BY 血液型

SELECT句select 血液型,count(*)

•group byに指定したフィールド+集計関数•グループ化されたレコード単位でcount(*)

FROM句 名簿データベースを指定

GROUP BY句 血液型でレコードをグループ化

2011年10月13日木曜日

GROUP BY句には複数のフィールドを指定してグループ化もできる(P211 例2)

2011年10月13日木曜日

SELECT 血液型,性別,count(*)  FROM 名簿 GROUP BY 血液型,性別

SELECT句select 血液型,性別,count(*)

•group byに指定したフィールド+集計関数•グループ化されたレコード単位でcount(*)

FROM句 名簿データベースを指定

GROUP BY句 血液型と性別の組みでレコードをグループ化

2011年10月13日木曜日

SELECT 血液型,性別,count(*)  FROM 名簿 GROUP BY 血液型,性別

GROUP BY 句で指定したフィールドがSELECT句でも指定されることに

注意

2011年10月13日木曜日

P223 集計後の抽出•平均年令が40歳以上の県•注文個数が2個以上の商品•二人以上が就職する企業というように、先に集計をして、

その集計結果を元に抽出条件を指定できる

2011年10月13日木曜日

HAVING句を使う

•書式 P223,224• SELECT フィールド... FROM テーブル名 GROUP BY フィールド名... HAVING BY 抽出条件

2011年10月13日木曜日

WHEREとの違い

•WHEREではレコードを絞り込んでから集計していた

• HAVING は先に集計をして、その結果に条件文を適応してレコードを絞込む

• P223 図5-33

2011年10月13日木曜日

SELECT 商品番号,SUM(個数) FROM 注文サブ GROUP BY 商品番号 HAVING SUM(個数 ) >= 2;

SELECT句 select 血液型,性別,SUM(*)

FROM句 名簿データベースを指定

GROUP BY句 商品番号でレコードをグループ化

HAVING句 商品番号の組みで個数の合計を集計し、集計結果が2以上のレコードを抽出

2011年10月13日木曜日

日付データの扱い

日付データのフォーマットは‘YYYY-MM-DD’

2011年10月13日木曜日

select birthday from pinfo where birthday = ’1977-10-13’

2011年10月13日木曜日

日付関数

YEAR(フィールド名)フィールドから年の値を取り出す

MON(フィールド名)フィールドから月の値を取り出す

DAY(フィールド名)フィールドから

日にちの値を取り出す

2011年10月13日木曜日

日付から年だけを取り出す例: select year(birthday) from pinfo;

日付から月だけを取り出す例: select month(birthday) from pinfo;

日付から日にちだけを取り出す例: select day(birthday) from pinfo;

2011年10月13日木曜日

評価課題

2011年10月13日木曜日

Recommended