
初めての質問になります。
以下のようなテーブルで、dataカラムにカンマ区切りのデータを保存しているのですが、こちらはgroup byやcount等を使ってSQL一発で集計結果を取得できるのでしょうか?
SELECT count(*) FROM TEST WHERE FIND_IN_SET('1', data)で1から順番に取得は出来るのですが、数が多いとちょっといかがなものかと思い、質問させていただきました。
環境:mysql5.5
------------
|data
------------
|1,2,3
------------
|1,2,10
------------
|1,2,3,10
------------
期待する結果は以下のような感じです。
1|3
---------
2|3
---------
3|2
---------
10|2
No.1ベストアンサー
- 回答日時:
>dataカラムにカンマ区切りのデータを保存している
いや、SQLでそれはあり得ない・・・
こうしてみて
//テストデータ
create table tbl(id int not null auto_increment primary key,groupid int,data int);
insert into tbl(groupid,data) values(1,1),(1,2),(1,3),(2,1),(2,2),(2,10),(3,1),(3,2),(3,3),(3,10);
//カンマ区切り表示
select groupid,group_concat(data order by data) as datas from tbl group by groupid;
//data単位で集計
select data,count(*) as count from tbl group by data;
早速のご回答ありがとうございました!
よく求人サイトなどで、「未経験可」「交通費支給」「時給1000円以上」といったオプションがあると思うのですが、そのデータをカンマ区切りで保存していました。
それで、そのオプションにマッチする企業が何件あるか?みたいな感じで使おうと思っていました。
ですので実際のテーブルはこんな感じです。(一部カラム省略)
create table tbl
(
conpany_id int not null auto_increment primary key,
conpany_name text not null,
service varchar(26),
・・・
);
// オプション配列
$options = array(1 = '未経験可', 2 = '交通費支給', 3 = '時給1000円以上', ・・・);
基本的にテーブル設計がイマイチだったんですね。。
tblテーブルからserviceカラムを削除し、ご教授いただいた項目で別テーブルを作成することで解決しました!
group_concatは今まで使ったことが無く、テーブル設計もまだまだ未熟なので非常に良い勉強になりました!
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BGMを教えてほしいです!
-
テーブル名が可変の場合のクエ...
-
LIMIT で条件を満たしているの...
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
utf8bomとutf8mb4の違いがいま...
-
「総降水量が100mm以上になる...
-
SQLで漢字名称を都道府県や市区...
-
SQLあってますか?こう?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
[MySQL]LOAD DATA INFILE一部レ...
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
WHEREなどの条件が多い場合、ど...
-
MySQL 改行コードを含む文字列...
-
データを同データが並ばないよ...
-
同一日に複数レコードがある場...
-
sqlについて質問です。
-
MySQL AUTO_INCREMENTが最大に...
-
betweenを使うyyyy/mm/ddでの範...
-
mysqlの結果の速度はデータの違...
-
データ型による検索速度の違い...
-
カラムの値を、条件により動的...
-
フレンドリストのようなものを...
-
年月日のうち月日だけ取得したい。
-
MYSQLのストアドでの動的SQLに...
-
select * での表示が崩れる?
-
MySQLデータでデータチェック
-
データの暗号化について
おすすめ情報