初めての質問になります。
以下のようなテーブルで、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で質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
select * での表示が崩れる?
-
[MySQL]LOAD DATA INFILE一部レ...
-
テーブルの列数を調べたい
-
MYSQLで小数点を表示する場合と...
-
betweenを使うyyyy/mm/ddでの範...
-
GREATESTで NULLをスルーする方...
-
SELECT文で、指定カラム以外の...
-
MYSQLで全てのカラムから検索す...
-
INDIRECT関数の代替方法は?
-
一部のカラムでdistinctし全て...
-
DBの定義のサイズを大きくし過...
-
mysqlでdate型のカラムに今日か...
-
mysqlで50音順にorder byしたい。
-
BULK INSERT時のNull許容について
-
JDBCドライバがない?
-
SQLServerでNULLを挿入したいです
-
正規表現で置換
-
Accessの「IIF」に相当するSQL...
-
スペースによる絞り込み検索をS...
-
whereで全てを検索する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
[MySQL]LOAD DATA INFILE一部レ...
-
select * での表示が崩れる?
-
フレンドリストのようなものを...
-
WHEREなどの条件が多い場合、ど...
-
MySQL AUTO_INCREMENTが最大に...
-
時間範囲が重複したレコードを...
-
「VARCHAR(255)」を「text」に...
-
MySQL テーブルの一部のカラム...
-
MySQL 改行コードを含む文字列...
-
このクエリを教えてください
-
列視点ではなく、行視点での検...
-
データの暗号化について
-
MySQLで、指定の複数カラムのみ...
-
whereの使い方が分からないので...
-
MYSQLのレコードを上書きしたい...
-
誤って削除したIDカラムを復元...
-
SQLの範囲指定検索の質問です。
おすすめ情報