
以下のような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にお強い方、お力を貸して頂けないでしょうか?
No.2ベストアンサー
- 回答日時:
どうして、わざわざこんな扱いにくいテーブルにしているのでしょうかね。
。。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
確かに扱い難いテーブル設計でした・・・
教えて頂いたunionで結合してからcountする方法で無事値が取り出せました!有難うございました!
No.1
- 回答日時:
「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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数カラムを跨いだCOUNTができ...
-
Query OK, 0 rows affected
-
SQLiteファイルへの同時アクセ...
-
ディスク上のサイズの乖離が大...
-
ヤフーショッピングでPayPay支...
-
ファイルに記述されている複数...
-
SQL+Plusの訂正
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
関数引数に対する制限値チェッ...
-
C#で大量のデータを扱うソフト...
-
socket のエラー
-
新規作成したPostgresqlデータ...
-
PostgreSQL リストアエラー
-
データベースの復元について
-
BASP21送信エラーVB.NET
-
quoteした文字列を使ったSQL文...
-
CSVファイルをBULK INSERTでSQL...
-
リコーimagioneo630 エラーs...
-
ACCESS VBA;コマンドボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pg_restoreでエラー
-
複数カラムを跨いだCOUNTができ...
-
アクセス画像DB、画像のパスを...
-
ここでいう「データソース名」...
-
バイナリデータ格納について
-
ディスク上のサイズの乖離が大...
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
ヤフーショッピングでPayPay支...
-
PostgreSQLについて教えてくだ...
-
Query OK, 0 rows affected
-
tar.gzファイルのリストアについて
-
Windows上のPostgreSQLの完全削...
-
CSVファイルをBULK INSERTでSQL...
-
リコーimagioneo630 エラーs...
-
ACCESSのフォームだけを起動す...
-
createdbでいきなりつまづいて...
-
SJISのDBは作れますか?
-
ACCESSのレコードを削除しても...
-
ファイルに記述されている複数...
おすすめ情報