![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
以下のような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で質問しましょう!
似たような質問が見つかりました
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP データベースを用いたwebページ 1 2022/12/27 20:12
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- プラモデル・鉄道模型・模型製作 ねたみでしょうか 5 2023/08/27 17:40
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
件数とデータを同時に取得するには?
Oracle
-
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
2つの項目が重複するレコードを抽出する方法はありますか?
MySQL
-
-
4
カーソル0件の時にエラーを発生させる
Oracle
-
5
count集計の結果が0の場合でも表示したい
SQL Server
-
6
2つの列が同じ値の行を取得するSQL
Oracle
-
7
複数テーブルにわたるCOUNT
MySQL
-
8
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
9
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
10
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
11
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
12
count関数の値をwhere句で使用する方法について
MySQL
-
13
単一グループのグループ関数ではありません。
Oracle
-
14
eclipseのデバッグ中に変数の値(長い文字列)を確認したい
Java
-
15
SQL 複数テーブルのupdate
Oracle
-
16
SQLで部分的にGROUP BYしたいとき
Oracle
-
17
SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法
MySQL
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数カラムを跨いだCOUNTができ...
-
pg_restoreでエラー
-
ディスク上のサイズの乖離が大...
-
ヤフーショッピングでPayPay支...
-
oracle spool SJIS → UTF-8
-
ACCESS VBA;コマンドボックス...
-
ACCESSのフォームだけを起動す...
-
psql でのエラー出力について
-
Windows版 pg_dumpの結果をログ...
-
アクセスで、OLEサーバーも...
-
VB上でのSQLローダ利用
-
Windows上のPostgreSQLの完全削...
-
ポスグレでプロシージャは無いの?
-
VB.NET Webアプリケーションの...
-
SQL+Plusの訂正
-
トランザクションの開始
-
外部プログラムを実行する方法...
-
SQLPlusでUnicode
-
SJISのDBは作れますか?
-
tar.gzファイルのリストアについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pg_restoreでエラー
-
複数カラムを跨いだCOUNTができ...
-
ここでいう「データソース名」...
-
バイナリデータ格納について
-
[SQLサーバ&勘定奉行]バイナリ...
-
ディスク上のサイズの乖離が大...
-
ヤフーショッピングでPayPay支...
-
エクセルのデータをアクセスに...
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
PostgreSQLについて教えてくだ...
-
Windows上のPostgreSQLの完全削...
-
アクセスで、OLEサーバーも...
-
ACCESSのフォームだけを起動す...
-
エクセルVBAでUWSCを使う
-
createdbでいきなりつまづいて...
-
CSVファイルをBULK INSERTでSQL...
-
エクセルVBAでcommit,rollback
-
Query OK, 0 rows affected
おすすめ情報