CodeGym /コース /SQL SELF /実際の課題でのデータフォーマット例

実際の課題でのデータフォーマット例

SQL SELF
レベル 5, レッスン 4
使用可能

データベースを使うシーンで一番よくあるのが、レポート用のデータ準備だよね。例えば、君が大学で働いてて、上司(もちろんSQLなんて全然わかってない人)が「学生の名前と苗字をくっつけて、生年月日をDD-MM-YYYY形式で出して」って頼んできたとしよう。やることはシンプル:データをキレイに見せること。SQLはこういう時の頼れる相棒だよ!

例1:名前と苗字の結合

まずは、テーブルstudentsから学生の名前(first_name)と苗字(last_name)をくっつけてみよう。

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name
FROM 
    students;

ここで何が起きてる?

  • CONCAT()は文字列を結合する関数。名前と苗字の間にスペースを入れて見やすくしてるよ。
  • 結果は新しいカラムfull_nameに保存される。

結果はこんな感じ:

full_name
Otto Art
Anna Song
Pol Mac

例2:日付のフォーマット

次は、生年月日をフォーマットしてクエリに追加しよう。

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students;

ここが新しいポイント:

  • TO_CHAR()関数をbirth_dateフィールドに使ってる。
  • 'DD-MM-YYYY'フォーマットで日付を見やすく変換(例:25-12-2001)。

結果:

full_name formatted_birth_date
Otto Art 12-04-1995
Anna Song 03-08-1996
Pol Mac 21-11-1997

できた!これでキレイなレポートが完成だね。

データエクスポート用のフォーマット

例えば、同僚が注文データをCSVでエクスポートしてExcelで使いたいって言ってきたとしよう。でも、DBのデータはそのままだと見にくいし、営業部の人たちは「この形で出して!」ってうるさい。例えばtotal_priceフィールドは、$100.00みたいな形で見せてほしいって。

例3:数字を通貨フォーマットに変換

テーブルordersの注文データをエクスポート用に整えるよ:

SELECT
    order_id,
    TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM 
    orders;

TO_CHAR()はここで何してる?

  • FM(Fill Mode)は余計なスペースを消してくれる。
  • $は通貨記号を追加。
  • 999,999.00は千区切りと小数点2桁のフォーマット。

結果:

order_id formatted_price
1 $1,000.00
2 $2,500.50
3 $10.00

これで同僚もExcelにインポートしやすいし、会議で褒められるかもね。

最終課題

ここからが本番。今まで覚えたスキルを全部使ってみよう!

課題

テーブルstudentsに対して、次のクエリを作ってみて:

  1. 名前と苗字をfull_nameカラムに結合する。
  2. 生年月日をDD-MM-YYYY形式に変換する。
  3. 学生の現在の年齢を表示する。

クエリはこんな感じになるよ:

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
    DATE_PART('year', AGE(birth_date)) AS age
FROM 
    students;

新しいポイント:

  • AGE(birth_date)は今の日付と生年月日の間の期間(年・月・日)を返す。
  • DATE_PART('year', AGE(birth_date))でその期間から年だけを取り出す。

結果:

full_name formatted_birth_date age
Otto Art 12-04-1995 28
Anna Song 03-08-1996 27
Pol Mac 21-11-1997 25

こんなレポートなら、どんな細かい同僚も納得してくれるはず!

特定条件でのフォーマット

時には、条件やフィルタのためにデータをフォーマットすることもあるよ。例えば、今月が誕生日の学生だけを取り出したい場合とか。

例4:月でフィルタリング

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
WHERE 
    DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);

どうやって動いてる?

  • DATE_PART('month', birth_date)で生年月日から月だけを取り出す。
  • CURRENT_DATEは今日の日付。そこからDATE_PART()で月を取る。

フォーマットとソートの組み合わせ

じゃあ今までの知識を組み合わせて、ソートも追加してみよう。例えば、学生を生年月日順に並べるリストを作るとか。

例5:生年月日でソート

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
ORDER BY 
    birth_date ASC;

ASC(昇順)だと年上から順に、DESC(降順)だと若い順に並ぶよ。

ユニーク値との組み合わせ

最後にちょっと応用問題。大学に複数の都市にキャンパスがあるとして、学生がいる都市のリストを重複なしで、アルファベット順に出したいとしよう。

例6:ユニーク値とソート

SELECT DISTINCT
    city 
FROM 
    students
ORDER BY 
    city ASC;

DISTINCTは何してる?

重複する都市名を省いて、1つずつだけ結果に出してくれる。

なんでこんなことするの?

便利さと見た目の良さ。 データがキレイだと作業しやすいし、上司からの質問も減るよ。

リアルな現場対応力。 レポートを自動生成したり、エクスポートやプレゼン資料も楽勝になる。

自分の価値アップ。 SQLはただのデータ操作じゃなくて、分かりやすくて役立つ形にするためのものなんだ。

このスキルを使って、ただのクエリじゃなくて“作品”を作ろう!次のレクチャーではPostgreSQLの魔法をもっと深掘りしていくよ。

2
タスク
SQL SELF, レベル 5, レッスン 4
ロック未解除
カラムの結合と文字列のフォーマット
カラムの結合と文字列のフォーマット
2
タスク
SQL SELF, レベル 5, レッスン 4
ロック未解除
数値を通貨形式でフォーマットする
数値を通貨形式でフォーマットする
1
アンケート/クイズ
文字列のフォーマット、レベル 5、レッスン 4
使用不可
文字列のフォーマット
文字列のフォーマット
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION