アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなDB内に顧客id(ユニーク)とhob1,hob2,hob3のようなカラムがありまして、hob1,hob2,hob3には任意で趣味を表す値が入っております。

【hoge_db】
id | hob1 | hob2 | hob3
1 | 1 | 2 | 3
2 | 2 | 3 | NULL
3 | 3 | NULL | NULL
3 | NULL | NULL | NULL
・・・
【SELECTしたい値】
趣味1:1名
趣味2:2名
趣味3:3名

この各趣味を表す値に対する顧客数を求めたいのですが、3つのカラム全てに対してCOUNTをする方法が分かりません。。

どうかSQLにお強い方、お力を貸して頂けないでしょうか?

A 回答 (2件)

「1発でやろう」と考えると失敗します。


趣味が3個あるのだから、別々に求める必要があります。
コード1の数を求めるクエリは以下のようになります。
SELECT 1 AS shumi,
SUM(CASE WHEN 1 IN (hob1,hob2,hob3) THEN 1 ELSE 0 END) AS cnt
FROM hoge_db GROUP BY shumi

同様に2、3を求めて結合します。よって、解は以下の通り。

SELECT 1 AS shumi,
SUM(CASE WHEN 1 IN (hob1,hob2,hob3) THEN 1 ELSE 0 END) AS cnt
FROM hoge_db GROUP BY shumi
UNION
SELECT 2 AS shumi,
SUM(CASE WHEN 2 IN (hob1,hob2,hob3) THEN 1 ELSE 0 END) AS cnt
FROM hoge_db GROUP BY shumi
UNION
SELECT 3 AS shumi,
SUM(CASE WHEN 3 IN (hob1,hob2,hob3) THEN 1 ELSE 0 END) AS cnt
FROM hoge_db GROUP BY shumi
    • good
    • 0
この回答へのお礼

ご回答有難うございました!とても参考になりました!

お礼日時:2009/10/29 13:03

どうして、わざわざこんな扱いにくいテーブルにしているのでしょうかね。

。。

select
hob,count(hob)
from
(
select hob1 as hob from hoge_db where hob1 is not null
union all
select hob2 as hob from hoge_db where hob2 is not null
union all
select hob3 as hob from hoge_db where hob3 is not null
) as x
group by hob
order by hob
    • good
    • 2
この回答へのお礼

確かに扱い難いテーブル設計でした・・・
教えて頂いたunionで結合してからcountする方法で無事値が取り出せました!有難うございました!

お礼日時:2009/10/29 13:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A