以下のような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.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
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する方法で無事値が取り出せました!有難うございました!
お探しの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も見ています
-
風水の観点で選ぶ観葉植物とは?置き場所や上げたい運気ごとの注意点を紹介!
観葉植物で運気をアップするコツを、風水デザイン1級建築士の福島昌彦さんに伺った。
-
複数テーブルにわたるCOUNT
MySQL
-
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
件数とデータを同時に取得するには?
Oracle
-
-
4
count集計の結果が0の場合でも表示したい
SQL Server
-
5
2つの項目が重複するレコードを抽出する方法はありますか?
MySQL
-
6
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
7
2つの列が同じ値の行を取得するSQL
Oracle
-
8
SQLで部分的にGROUP BYしたいとき
Oracle
-
9
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
10
カーソル0件の時にエラーを発生させる
Oracle
-
11
<SQL>重複しているデータの場合は最新の日時のものを取得したい
SQL Server
-
12
選択したチェックボックスのみチェックを入れたいのですが
その他(データベース)
-
13
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
14
count関数の値をwhere句で使用する方法について
MySQL
-
15
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
16
3つ以上のテーブルをUNIONするのは現時的でないでしょうか?
MySQL
-
17
SQL 複数テーブルのupdate
Oracle
-
18
複数のテーブルから値を合計出力するSQLについて
MySQL
-
19
SQL Left Join で重複を排除するには
SQL Server
-
20
複数JOINしているとCOUNTが正しく取得できな
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pg_restoreでエラー
-
ディスク上のサイズの乖離が大...
-
ヤフーショッピングでPayPay支...
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
階層型データベースとVSAM...
-
LinuxからWindowsへのリストア...
-
エクセルのデータをアクセスに...
-
エクセルVBAでUWSCを使う
-
Query OK, 0 rows affected
-
Windows上のPostgreSQLの完全削...
-
date型に空白を入れるとエラー...
-
CSVファイルをBULK INSERTでSQL...
-
ACCESSのフォームだけを起動す...
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
pg_restoreの-Cオプションについて
-
socket のエラー
-
PostgresQLでサーバーを新規追...
-
ACCESS VBA;コマンドボックス...
-
pg_dumpでデータの引越し
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pg_restoreでエラー
-
複数カラムを跨いだCOUNTができ...
-
ここでいう「データソース名」...
-
[SQLサーバ&勘定奉行]バイナリ...
-
ヤフーショッピングでPayPay支...
-
ディスク上のサイズの乖離が大...
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
socket のエラー
-
PostgreSQLについて教えてくだ...
-
createdbでいきなりつまづいて...
-
新規作成したPostgresqlデータ...
-
tar.gzファイルのリストアについて
-
Windows上のPostgreSQLの完全削...
-
shellからpostgresqlへの変数の...
-
ACCESSのフォームだけを起動す...
-
SQLiteファイルへの同時アクセ...
-
Query OK, 0 rows affected
-
SJISのDBは作れますか?
-
CSVファイルをBULK INSERTでSQL...
おすすめ情報