SQL練習

コマンドプロンプトからpsqlの場合。(通常はpgAdminⅢが便利)

ログイン

cd C:\PostgreSQL\8.1\bin
C:\PostgreSQL\8.1\bin>psql -U postgres shop
Password for user postgres:
Welcome to psql 8.1.4, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

並べ替える

顧客マスタから顧客の名前とフリガナを50音順に並び替える

shop=# SELECT
shop-# 名前
shop-# , フリガナ
shop-# FROM
shop-# 顧客マスタ
shop-# ORDER BY フリガナ ASC
shop-# ;
名前 | フリガナ

                                    • -

川口 | カワグチ
宮本 | ミヤモト
中澤 | ナカザワ
中田 | ナカタ
中村 | ナカムラ
柳沢 | ヤナギサワ
高原 | タカハラ
玉田 | タマダ
(8 rows)

あれ、昇順に並んでないぞ・・・

shop=# SELECT
shop-# 名前, フリガナ
shop-# FROM
shop-# 顧客マスタ
shop-# ORDER BY フリガナ DESC
shop-# ;
名前 | フリガナ

                                    • -

高原 | タカハラ
中澤 | ナカザワ
中田 | ナカタ
中村 | ナカムラ
柳沢 | ヤナギサワ
玉田 | タマダ
宮本 | ミヤモト
川口 | カワグチ
(8 rows)

降順も変だ・・・

レコード件数を求める

商品マスタの件数をカウントする

shop=# SELECT
shop-# COUNT(*)
shop-# FROM
shop-# 商品マスタ
shop-# ;
count

            • -

12
(1 row)

平均値と合計値を求める

受注金額の平均値と合計値を算出する

shop=# SELECT
shop-# AVG(受注合計)
shop-# , SUM(受注合計)
shop-# FROM
shop-# 受注データ
shop-# ;
avg | sum

                                                        • -

14010.000000000000 | 140100
(1 row)

なんだかavgは表示される桁数が多いなぁ。
pgAdminのクエリーツールで実行すると、avg(numeric) sum(int8)とタイトルに表示されているから、型が違うのが原因らしいが、どうやったら統一できるのかな。

最大値と最小値を求める

受注金額の最大値と最小値を求める

shop=# SELECT
shop-# MAX(受注合計)
shop-# , MIN(受注合計)
shop-# FROM
shop-# 受注データ
shop-# ;
max | min

                          • -

30000 | 1500
(1 row)

グループ毎に集計する

商品マスタからグループ名ごとに商品件数と在庫件数を求める

shop=# SELECT
shop-# グループ名
shop-# , COUNT(*)
shop-# , SUM(在庫数)
shop-# FROM
shop-# 商品マスタ
shop-# GROUP BY
shop-# グループ名
shop-# ;
グループ名 | count | sum

                                                                  • -

サポーターズウェア | 2 | 30
ボール | 3 | 21
レプリカグッズ | 2 | 7
サポーターズグッズ | 5 | 72
(4 rows)

GROUP BYによる並び方*1がおかしい・・・

*1:ORDER BY しなければ昇順・降順に並ぶわけありませんね(..;