
SQL文で成績と性別での人数分布を求めるクロス集計関数が出来ず困ってます。
サンプルとしては
学年 性別 評価(ABC)
1年 男 A
1年 女 A
1年 男 A
1年 男 B
2年 男 B
2年 女 C
欲しい出力としては各サンプル毎の人数です。
1年 男-A評価,男B評価,男C評価,女A評価,女B評価,女C評価
2年 男-A評価,男B評価,男C評価,女A評価,女B評価,女C評価
3年 男-A評価,男B評価,男C評価,女A評価,女B評価,女C評価
・
・
・
という具合です。
以前は
SELECT COUNT(*) AS 分布人数, 性別, 成績 FROM 成績
GROUP BY 年齢, 性別, 学年 HAVING 学年 = @がくねん ORDER BY 年齢,成績
というSQL文で1学年毎に抽出していました。
クロス集計で1つのSQL文で出力したいのですがいかがでしょうか?
No.2ベストアンサー
- 回答日時:
表の列構成、元のデータ例、得たい結果例が示されていると、回答する側としても分かりやすいのですけどね。
次のようなSQLでは、いかがでしょうか?
select
学年,
count(case when 性別='m' and 評価='A' then 1 else null end) as 男A,
count(case when 性別='m' and 評価='B' then 1 else null end) as 男B,
count(case when 性別='m' and 評価='C' then 1 else null end) as 男C,
count(case when 性別='w' and 評価='A' then 1 else null end) as 女A,
count(case when 性別='w' and 評価='B' then 1 else null end) as 女B,
count(case when 性別='w' and 評価='C' then 1 else null end) as 女C
from t1
group by 学年
;

No.1
- 回答日時:
んーこんなのはどうでしょう、長いですけど構造は単純です。
良ければ質問者さま用に適宜書き換えてみてください。
SELECT '第一学年' AS 学年,
COUNT(CASE WHEN nenndo = '1' and sex = '男' and hyouka = 'A' THEN 1 ELSE null END) AS men_A,
COUNT(CASE WHEN nenndo = '1' and sex = '男' and hyouka = 'B' THEN 1 ELSE NULL END) AS men_B,
COUNT(CASE WHEN nenndo = '1' and sex = '男' and hyouka = 'C' THEN 1 ELSE NULL END) AS men_C,
COUNT(CASE WHEN nenndo = '1' and sex = '女' and hyouka = 'A' THEN 1 ELSE NULL END) AS women_A,
COUNT(CASE WHEN nenndo = '1' and sex = '女' and hyouka = 'B' THEN 1 ELSE NULL END) AS women_B,
COUNT(CASE WHEN nenndo = '1' and sex = '女' and hyouka = 'C' THEN 1 ELSE NULL END) AS women_C
FROM test20070707
UNION
SELECT '第二学年' AS 学年,
COUNT(CASE WHEN nenndo = '2' and sex = '男' and hyouka = 'A' THEN 1 ELSE NULL END) AS men_A,
COUNT(CASE WHEN nenndo = '2' and sex = '男' and hyouka = 'B' THEN 1 ELSE NULL END) AS men_B,
COUNT(CASE WHEN nenndo = '2' and sex = '男' and hyouka = 'C' THEN 1 ELSE NULL END) AS men_C,
COUNT(CASE WHEN nenndo = '2' and sex = '女' and hyouka = 'A' THEN 1 ELSE NULL END) AS women_A,
COUNT(CASE WHEN nenndo = '2' and sex = '女' and hyouka = 'B' THEN 1 ELSE NULL END) AS women_B,
COUNT(CASE WHEN nenndo = '2' and sex = '女' and hyouka = 'C' THEN 1 ELSE NULL END) AS women_C
FROM test20070707
UNION
SELECT '第三学年' AS 学年,
COUNT(CASE WHEN nenndo = '3' and sex = '男' and hyouka = 'A' THEN 1 ELSE NULL END) AS men_A,
COUNT(CASE WHEN nenndo = '3' and sex = '男' and hyouka = 'B' THEN 1 ELSE NULL END) AS men_B,
COUNT(CASE WHEN nenndo = '3' and sex = '男' and hyouka = 'C' THEN 1 ELSE NULL END) AS men_C,
COUNT(CASE WHEN nenndo = '3' and sex = '女' and hyouka = 'A' THEN 1 ELSE NULL END) AS women_A,
COUNT(CASE WHEN nenndo = '3' and sex = '女' and hyouka = 'B' THEN 1 ELSE NULL END) AS women_B,
COUNT(CASE WHEN nenndo = '3' and sex = '女' and hyouka = 'C' THEN 1 ELSE NULL END) AS women_C
FROM test20070707
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男性が好きな人でオナニーする...
-
男性側はセックスでの挿入時、...
-
昨日の晩にスゴくいやらしい体...
-
男性に質問です! 男性は女性の...
-
付き合えそうな女性との行為…想...
-
処女を抱いた男性へ質問です
-
処女とエッチして 相手の男性が...
-
息子と性的関係になり抜け出せない
-
男性に質問:彼女をオカズにし...
-
男の人が勃ってるときって、頭...
-
エロくなってきた妻
-
28才OLです、マスターベー...
-
男性は好きな女性なら挿入行為...
-
入れられてる側は(女性側)どん...
-
職場の女性社員を見て妄想する...
-
男性に質問!女の人がイク時っ...
-
男は女性と密室で2人きりにな...
-
セフレの女性が離れていきそうな時
-
処女のとき、何回目のHで挿入...
-
イっちゃった時って男の人って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
女性はマンコ舐めてほしいんで...
-
男性に質問です! 男性は女性の...
-
処女を抱いた男性へ質問です
-
昨日の晩にスゴくいやらしい体...
-
付き合えそうな女性との行為…想...
-
息子と性的関係になり抜け出せない
-
処女とエッチして 相手の男性が...
-
エロくなってきた妻
-
男性が好きな人でオナニーする...
-
28才OLです、マスターベー...
-
男の人が勃ってるときって、頭...
-
男性は好きな女性なら挿入行為...
-
男性側はセックスでの挿入時、...
-
入れられてる側は(女性側)どん...
-
生とゴムの違い
-
職場の女性社員を見て妄想する...
-
セフレの女性が離れていきそうな時
-
男性に質問!女の人がイク時っ...
-
男は女性と密室で2人きりにな...
-
イっちゃった時って男の人って...
おすすめ情報