以下のような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
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
5
2つの列が同じ値の行を取得するSQL
Oracle
-
6
複数テーブルにわたるCOUNT
MySQL
-
7
count集計の結果が0の場合でも表示したい
SQL Server
-
8
カーソル0件の時にエラーを発生させる
Oracle
-
9
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
10
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
11
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
12
count関数の値をwhere句で使用する方法について
MySQL
-
13
異なるスキーマからデータを抽出するには?oracl、PL/SQL
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ができ...
-
ディスク上のサイズの乖離が大...
-
ヤフーショッピングでPayPay支...
-
Windows版 pg_dumpの結果をログ...
-
LinuxからWindowsへのリストア...
-
コマンドと関数の違い
-
ソケットの異常終了について
-
oracle spool SJIS → UTF-8
-
Windows上のPostgreSQLの完全削...
-
PostgreSQLについて教えてくだ...
-
新規作成したPostgresqlデータ...
-
ACCESSのフォームだけを起動す...
-
Access97のリンクテーブルについて
-
リコーimagioneo630 エラーs...
-
DB2のbindコマンドの"+o""-o"オ...
-
AS400でのライブラリ配下の全て...
-
トランザクションの開始
-
socket のエラー
-
エクセルVBAでコマンドプロンプ...
-
AccessのOLEオブジェクト型につ...
マンスリーランキングこのカテゴリの人気マンスリー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
おすすめ情報