
初めての質問になります。
以下のようなテーブルで、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ランキング
-
テーブルの列数を調べたい
-
MYSQLで小数点を表示する場合と...
-
group byで最後のレコードを抽...
-
MYSQLのストアドでの動的SQLに...
-
WHEREなどの条件が多い場合、ど...
-
DBの定義のサイズを大きくし過...
-
SELECT文で、指定カラム以外の...
-
AUTO_INCREMENTに0はダメ?
-
カラムとコラムの使い分け
-
INDIRECT関数の代替方法は?
-
PL/SQLでの文字列比較
-
他のシートの検索
-
複数カラム検索で、LIKE "%検索...
-
End Ifに対応するIfブロックが...
-
SQLServerでNULLを挿入したいです
-
一部のカラムでdistinctし全て...
-
SQLです!!教えてください。
-
UNIONする際、片方テーブルしか...
-
【SQL文】 where (colA & colB)...
-
whereで全てを検索する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
[MySQL]LOAD DATA INFILE一部レ...
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
WHEREなどの条件が多い場合、ど...
-
MySQL 改行コードを含む文字列...
-
データを同データが並ばないよ...
-
同一日に複数レコードがある場...
-
MySQL AUTO_INCREMENTが最大に...
-
sqlについて質問です。
-
mysqlの結果の速度はデータの違...
-
betweenを使うyyyy/mm/ddでの範...
-
カラムの値を、条件により動的...
-
データ型による検索速度の違い...
-
フレンドリストのようなものを...
-
MYSQLのストアドでの動的SQLに...
-
年月日のうち月日だけ取得したい。
-
select * での表示が崩れる?
-
MySQLデータでデータチェック
-
データの暗号化について
おすすめ情報