20代、30代の美容意識調査💡

🌸こんにちは、Yuinaですっ😊💕

今回は《美容センサス💄📊》のデータを使って、
20代と30代の美容への関心や意識の違いをSQLで見ていきますっ✨

👀「どっちの年代がどの美容に夢中なの〜?」
💉「美容医療を受ける理由って、何だろう?」

などなど、気になるトピックにゆる〜く触れていきます🎶

ドリル風にクイズ形式📝で問題を作っているので、
クイズ感覚で一緒に楽しく勉強していきましょう〜っ🎓💡

使用するテーブルはこちらですっ👇📁

sences
→ 「美容への関心」を年代別に調査したデータです。
「とても関心がある」「やや関心がある」という感じで、その熱量がパーセンテージで入ってます♡

年代n数とても関心がある (%)やや関心がある (%)関心がある合計 (%)関心がない合計 (%)
20代1,07636.039.275.224.8
30代1,14932.142.374.325.7

beauty_improvement
→ 「美容意識の改善ポイント」を年代別にまとめたテーブルです!
髪型とか肌質、体型とか、どこを気にしてるかがバッチリわかります。


項目20代 (%)30代 (%)
髪型58.657.1
髪質60.056.8
顔の肌質60.556.5
体型(全体のバランス)50.950.1
体毛(ムダ毛)62.151.5
体臭・口臭56.350.8

beauty_medical_reason
→ 「美容医療を受ける理由」が載っているデータです👀
コンプレックス解消や自己満足など、どんな動機で美容医療を選んでるか、わかりますね!

理由20代 (%)30代 (%)
コンプレックスの解消24.429.0
老化の予防・アンチエイジング7.610.9
モテたい6.26.8
幸せを感じたい10.07.2
自己満足24.225.6
自分へのご褒美として11.812.4
時短美容のため13.211.0
SNSでの投稿を見て7.14.1
周囲から勧められて7.88.6

それでは、よろしくお願いいたします!!

問題(+答え)🔥

問題1:

美容への関心(「とても関心がある」と「やや関心がある」の合計)が高いのはどちらの年代か?

SELECT 
    age_group,
    SUM(value) AS total_interest --valueの合計値を算出
FROM 
    beauty
WHERE 
    item IN ('とても関心がある', 'やや関心がある') --比較的、高い関心がある人に条件を絞る
GROUP BY 
    age_group
ORDER BY 
    total_interest DESC;

30代のスコアが74.4、20代のスコアが75.2となりました。

結果、20代は30代と比べて関心が高い傾向にあることが推測できます✨


問題2:

美容意識改善の項目の中で、20代と30代で意識の差が大きいトップ3の項目は何か教えてください。

SELECT
	item,
	MAX(CASE WHEN age_group = '20代' THEN value ELSE NULL END) AS value_20,
	MAX(CASE WHEN age_group = '30代' THEN value ELSE NULL END) AS value_30,
	--ROUND関数で桁を揃えるために、valueをnumeric型に変換します
	ROUND(
		ABS(
			MAX(CASE WHEN age_group = '20代' THEN value::numeric ELSE NULL END) - MAX(CASE WHEN age_group = '30代' THEN value::numeric ELSE NULL END)
		), 1
	) AS gap
FROM
	beauty.beauty_improvement
GROUP BY
	item
ORDER BY
	gap DESC
LIMIT 3;

20代と30代で意識の差が最も大きいのは体毛(ムダ毛)、

2番目に大きいのは体臭・口臭、3番目は顔の肌質という結果になりました。


問題3:

それぞれの年代で、美容医療を受ける理由のトップ3は何か教えてください。

WITH ranked_reasons AS (
    SELECT
        bmr.reason,
        bmr.age_group,
        bmr.value,
--age_group ごとにvalueの降順で並べて、それぞれに 1, 2, 3… という連番(rank)を振る
        ROW_NUMBER() OVER (PARTITION BY bmr.age_group ORDER BY bmr.value DESC) AS rank
    FROM
        beauty.beauty_medical_reason bmr
    WHERE
        bmr.age_group IN ('20代', '30代')
)
WITH ranked_reasons AS (
    SELECT
        bmr.reason,
        bmr.age_group,
        bmr.value,
        ROW_NUMBER() OVER (PARTITION BY bmr.age_group ORDER BY bmr.value DESC) AS rank
    FROM
        beauty.beauty_medical_reason bmr
    WHERE
        bmr.age_group IN ('20代', '30代')
)
--ここから新しいクエリ
SELECT
    reason,
    age_group,
    value
FROM
    ranked_reasons
WHERE
    rank <= 3
ORDER BY
    age_group,
    rank;

♡20代の美容医療を受ける理由

1位 コンプレックスの解消、2位 自己満足、3位 時短美容のため

♡30代の美容医療を受ける理由

1位 コンプレックスの解消、2位 自己満足、3位 自分へのご褒美として

という結果が出ました✨


問題4:

「美容医療を受ける理由」の中で、「自己満足」の割合は20代と30代でどれだけ違う?

手順1:20代・30代が美容医療やる理由のvalueの合計を確認します💃

WITH total_per_age AS (
    SELECT
        age_group,
        SUM(value) AS total_value
    FROM
        beauty.beauty_medical_reason
    WHERE
        age_group IN ('20代', '30代')
    GROUP BY
        age_group
)

手順2:20代と30代の中で『自己満足』と答えた方たちのスコアだけ取得します💁‍♀️

WITH total_per_age AS (
    SELECT
        age_group,
        SUM(value) AS total_value
    FROM
        beauty.beauty_medical_reason
    WHERE
        age_group IN ('20代', '30代')
    GROUP BY
        age_group
)

SELECT
	age_group,
    value AS self_value
FROM
	beauty.beauty_medical_reason
WHERE
    reason = '自己満足'
AND 
	age_group IN ('20代', '30代')


手順3:「自己満足 / 全体の理由」=つまり割合を出しますっ!

  • ratio_20:20代がどれだけ「自己満足」って言ってるか
  • ratio_30:30代がどれだけ「自己満足」って言ってるか
  • diff_ratio:その差!(30代 − 20代)
WITH total_per_age AS (
    SELECT
        age_group,
        SUM(value) AS total_value
    FROM
        beauty.beauty_medical_reason
    WHERE
        age_group IN ('20代', '30代')
    GROUP BY
        age_group
),

self_satisfaction AS (
    SELECT
        age_group,
        value AS self_value
    FROM
        beauty.beauty_medical_reason
    WHERE
        reason = '自己満足'
        AND age_group IN ('20代', '30代')
)

SELECT
    ROUND( (t20.self_value::numeric / total20.total_value)::numeric, 2) AS ratio_20,
    ROUND( (t30.self_value::numeric / total30.total_value)::numeric, 2) AS ratio_30,
    ROUND(
      ((t30.self_value::numeric / total30.total_value)::numeric - (t20.self_value::numeric / total20.total_value)::numeric)
    , 2) AS diff_ratio
FROM
    self_satisfaction t20
    JOIN total_per_age total20 ON t20.age_group = total20.age_group
    JOIN self_satisfaction t30 ON t30.age_group = '30代'
    JOIN total_per_age total30 ON total30.age_group = '30代'
WHERE
    t20.age_group = '20代';

20代のスコアは0.215(21.5%)、30代のスコアは0.221(21.1%)でその差は0.006(0.6%)となりました。

大差ないように感じますね。


達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ (CodeZine BOOKS) [ ミック ]

価格:2750円
(2025/5/25 18:35時点)
感想(0件)

問題5:

美容医療を受ける理由の中で、20代と30代で「差分」となる理由をすべて抽出し、差分も一緒に表示してください。

SELECT
	b20.item,
	b20.value AS score_20s,
	b30.value AS score_30s,
	ROUND((b20.value - b30.value)::numeric, 2) AS diff_20_30
FROM
	beauty.beauty_improvement b20
JOIN
	beauty.beauty_improvement b30
ON
	b20.item = b30.item
WHERE
	b20.age_group = '20代'
AND
	b30.age_group = '30代'
ORDER BY
--ABSは絶対値(数字の「符号を無視した大きさ」)を返す関数
	ABS(b20.value::numeric - b30.value) DESC
LIMIT 5;

差分が最も大きいのは体毛(ムダ毛)となりました。

体毛(ムダ毛)については、20代は関心のスコアが62.1と最も高くなっています。

続いて、顔の肌質、髪質となっています。

一方で、30代では髪型への関心が最も高い傾向にありますね。

そして、2番目に髪質、3番目に顔の肌質に関心があるということが伺えます。

問題6:

美容への関心が「高い(とても関心がある + やや関心がある)」人が、
どの部位の改善に最も注力しているかを、20代・30代で比較してください。

SELECT
	b20.item,
	b20.age_group,
	b20.value AS value_20,
	b30.age_group,
	b30.value AS value_30,
	ROUND((b20.value - b30.value)::numeric,2) AS gap
FROM
	beauty.beauty_improvement b20
INNER JOIN
	beauty.beauty_improvement b30
ON
	b20.item = b30.item
WHERE
	b20.age_group = '20代'
AND
	b30.age_group = '30代'
ORDER BY
--ABSは絶対値(数字の「符号を無視した大きさ」)を返す関数
	ABS(b20.value::numeric - b30.value) DESC
LIMIT 5;

問題7:

20代と30代の中で、美容に関心ある人たち(「とても関心がある+やや関心がある」の合計が高い年代)が特に気にしてる美容の改善ポイント(髪型や肌質)を上位3つを教えてください!

その年代が美容医療を受ける理由で一番多い理由とパーセンテージも一緒に見せてください。

beauty_improvement テーブルから 20代の改善項目を抽出しています。

そして、value が高い(=関心が高い)上位3件を取得します。

SELECT 
	item, 
	value
FROM 
	beauty.beauty_improvement
WHERE 
	age_group = '20代'
ORDER BY 
	value DESC
LIMIT 3;

beauty_medical_reason テーブルから 20代の医療美容の理由を抽出します。

そして、value が最も高い理由1件を取得します。

SELECT 
	reason, 
	value
FROM 
	beauty.beauty_medical_reason
WHERE 
	age_group = '20代'
ORDER BY 
	value DESC
LIMIT 1;

上位3つの改善項目と最も多い理由1つをクロス結合(CROSS JOIN)します。

結果として「改善項目 × 理由」の3行が出力される。

WITH top_improvements AS (
    SELECT 
        item, 
        value
    FROM 
        beauty.beauty_improvement
    WHERE 
        age_group = '20代'
    ORDER BY 
        value DESC
    LIMIT 3
),

top_reason AS (
    SELECT 
        reason, 
        value
    FROM 
        beauty.beauty_medical_reason
    WHERE 
        age_group = '20代'
    ORDER BY 
        value DESC
    LIMIT 1
)

--ここから新しいクエリ追加

SELECT
    t1.item,
    t1.value AS improvement_value,
    t2.reason,
    t2.value AS reason_value
FROM 
    top_improvements t1
CROSS JOIN 
    top_reason t2;

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ (CodeZine BOOKS) [ ミック ]

価格:2750円
(2025/5/25 18:35時点)
感想(0件)

📝まとめ:データで見ると、美容の本音が見えてくる!

今回、「美容分析ドリル🧪💄」を使ってデータをいじってみたところ…

「美容医療を受ける理由💉」や「改善したいポイント👀」に、
年代ごとのリアルな違いが見えてきて、すごく面白かったですっ😳

美容って、なんとなく感覚的なものだと思いがちだけど、
📊データで見ると超具体的! そしてめっちゃ共感できる〜っ💞と思いました🌸

これからも、いろんな角度から
美意識のデータを深掘りしていきたいな〜って思いましたっ🌈✨

見てくれてありがとうございましたっ🙏💖💫

コメント

タイトルとURLをコピーしました