http:www.sip-ac.jp/sip/konan_text/dbm05-03.html,        © 2001 Ayumi Yoshikawa
主観情報処理研究所

データベースマネジメント:SQL(最終更新:2015/12/09 11:25:24 JST)

SQL(データ集計・グループ化)

集計関数(教科書111ページ)

SQLにはデータを単に抽出するだけでなく,データの集計などの加工を行うことができる.集計関数には次のような演算が用意されている.

[*]下へ▼ ▲[#]上へ

行数カウント(教科書111ページ)

フィールド(列)に含まれるレコード数(行数)をカウントするためにはCOUNT()演算を用いる.引数として,フィールド名を取る.

/* [商品]表の行数のカウント */

SELECT COUNT(*)
FROM 商品

引数に特定のフィールド名を指定した場合は,そのフィールドのnullを除くレコード数をカウントする.

SELECT COUNT(工場)
FROM 商品

また引数にDISTINCT句をつけると,nullと重複値を除くレコード数をカウントする.

SELECT COUNT(DISTINCT 工場)
FROM 商品

[*]下へ▼ ▲[#]上へ

合計・平均・最大・最小(教科書112ページ)

データ処理でよく用いられる合計,平均,最大,最小を求める演算は次の通り.

合計値

合計値の計算にはSUM()演算を用いる.引数としてフィールド名を取る.

/* <単価>フィールドの合計 */

SELECT SUM(単価)
FROM 商品

平均値

平均値の計算にはAVG()演算を用いる.引数としてフィールド名を取る.

/* <単価>フィールドの平均 */

SELECT AVG(単価)
FROM 商品

最大値

最大値の計算にはMAX()演算を用いる.引数としてフィールド名を取る.

/* <商品コード>が200未満のデータの中の単価の最大値 */

SELECT MAX(単価)
FROM 商品
WHERE 商品コード < 200

最小値

同様に最小値の計算にはMIN()演算を用いる.引数としてフィールド名を取る.

/* <商品コード>が200未満のデータの中の単価の最小値 */

SELECT MIN(単価)
FROM 商品
Where 商品コード 7lt; 200

四則演算

演算結果に対して,通常の四則演算も利用可能である.

/* <単価>を1.05倍 */

SELECT 単価*1.05
FROM 商品

[*]下へ▼ ▲[#]上へ

グループ化(教科書114ページ)

フィールド内のすべてのデータについて集計関数を適用する以外に,データを他の列のデータでグループ化した上で,その各グループごとに集計関数を適用することもできる.

グループ化(教科書114ページ)

あるフィールドのデータでグループ化を行うためにはGROUP BY句を用いる.

/* <工場>フィールドのデータでグループ化したときの各グループのレコード数のカウント */

SELECT 工場, COUNT(*)
FROM 商品
GROUP BY 工場
上記グループごとの<単価>の平均

SELECT 工場, AVG(単価)
FROM 商品
GROUP BY 工場

[*]下へ▼ ▲[#]上へ

グループ化後の絞り込み(教科書115ページ)

グループ化した結果を条件により絞り込む場合には,HAVING句を用いる.

/* <工場>フィールドでグループ化し,各グループの<単価>フィールドの平均を求め,条件付け */

SELECT 工場, AVG(単価)
FROM 商品
GROUP BY 工場
HAVING AVG(単価) >= 300

/* 工場ごとの単価平均値が300以上のもののみ出力される.*/

[*]下へ▼ ▲[#]上へ

グループ化前の条件付け(教科書116ページ)

グループ化に関しては条件の絞り込みのタイミングが結果に影響する.グループ化後に絞り込む場合は前出のHAVING句を用いる.それに対して,グループ化前に条件付けを行いたい場合はWHERE句を用いる.WHERE句を用いた場合はまずデータがWHERE句で評価されて制限された後でGROUP BY句が適用される.

/* <単価>フィールドが200以上のデータについて,<工場>フィールドでグループ化し,カウント数が2以上を抽出 */

SELECT 工場, COUNT(*)
FROM 商品
WHERE 単価 >=200
GROUP BY 工場
HAVING COUNT(*) >=2

[*]下へ▼ ▲[#]上へ

並べ替え(教科書118ページ)

あるフィールドに着目して,そのフィールド内のデータをもとに並べ替えを行うためにはORDER BY句を用いる.昇順(小→大)に並べ替えるためにはASCを,また降順(大→小)に並べ替えるためにはDESCを用いる.なお並べ替えの条件を省略した場合は昇順となる.

/* 昇順ソート */

SELECT *
FROM 商品
ORDER BY 単価 ASC
/* 降順ソート */

SELECT *
FROM 商品
ORDER BY 単価 DESC

またORDER BY句に複数のフィールドを指定した場合,前から順に並べ替えて,その中で同じものがあったとき次の条件で並べ替える.

SELECT *
FROM 商品
ORDER BY 単価, 商品コード ASC

[*]下へ▼ ▲[#]上へ

パターンマッチ(教科書120ページ)

データと完全マッチングを取るのではなく,データがある文字列を含んでいるものを選び出す操作はパターンマッチと呼ばれる.この場合はWHERE句とLIKE演算子およびワイルドカードを表す%を用いる.ワイルドカードは0個以上の文字列を表す.

/* <商品名>が「○○せんべい」というレコードを抽出 */

SELECT *
FROM 商品
WHERE 商品名 LIKE '%せんべい'

この場合,「のりせんべい」は抽出されるが,「せんべい詰め合わせ」は抽出されない.もし「せんべい詰め合わせ」を抽出するなら「LIKE 'せんべい%'」ととするか,あるいは「せんべい」を含むもの全部抽出「LIKE '%せんべい%'」とする必要がある.

[*]下へ▼ ▲[#]上へ

値・範囲の指定(教科書122ページ)

特定の値に一致したレコードを取り出すためにはWHERE句にINで指定する.またある範囲に合致したレコードを取り出すためにはWHERE句にBETWEEN ANDで指定する.

/* 値の指定 */

SELECT *
FROM 商品
WHERE 単価 IN(100, 500)
/* 範囲の指定 */

SELECT *
FROM 商品
WHERE 単価 BETWEEN 200 AND 350

[*]下へ▼ ▲[#]上へ

このサイトに関するお問い合わせは,連絡先のページをご覧ください.

このページのボトムへ講義資料このページのトップへ

前のページに戻る  1  2  3  4  次のページへ進む   データベースマネジメントの目次に戻る ,        © 2001 Ayumi Yoshikawa