• ベストアンサー

コンマ区切りのデータを数える

id place 5 上野 6 銀座 7 銀座 これに対して SELECT place,count(*) FROM tb GROUP BY place ORDER BY COUNT(*) DESC; でplaceのvalueごとのランキング的なものを作成することはできたのですが id place 5 上野 6 銀座,東京 7 銀座,上野 8 銀座 に対して place COUNT(*) 銀座 3 上野 2 東京 1 という表を表示したいのですが、可能ですか?

  • MySQL
  • 回答数1
  • ありがとう数13

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

できないとは言わないけど、普通SQLでそんなデータの持ち方はしません こんな風にしてみて //元データ create table tb(id int,place varchar(20)); insert into tb values(5,'上野'),(6,'銀座'),(6,'東京'),(7,'銀座'),(7,'上野'),(8,'銀座'); //カンマ区切りの表示 select id,group_concat(place) as place from tb group by id; //集計 select place,count(*) as count from tb group by place;

cern5100
質問者

お礼

ありがとうございます。 基本がなっていなかったようで、非常によくわかりました。 データの入れ方をちゃんとしたときのカンマ区切り表示も 教えて下さって非常に助かります。 ありがとうございました。

関連するQ&A

  • 重複データからの取得方法を教えてください

    id s_no s_name ---------------- 1 001 aaaa 2 005 bbb1 3 005 bbb2 4 002 cccc 5 005 bbb3 6 005 bbb4 上のものがテーブルの内容です。取得したい結果が ---------------- 1 001 aaaa 4 002 cccc 5 005 bbb3 です。 試したSQLは select distinkd on (s_no) id,s_name from shain where id>=5 order by id desc select id,s_no,s_name from shain where id>=5 group by s_no order by id desc などです。 データベースがmdbなのでdistinkd onは使えませんでした。 もしかすると書式が違うのでしょうか?

  • ある条件のデータを取り出したいのに...

    ある一部の条件に沿ったデータを取り出したのですが、取り出す事ができません。 DB設計自体を変更しなくてはいけないと思ったので相談しました。 下記の条件でできるのかどうかをアドバイス頂けないでしょうか? お願いします。 select * FROM Atable, Btable, Ctable WHERE Atable.group_id = '$GROUP' AND Atable.group_id = Btable.group_id ORDER BY total_day DESC

  • sqglについて

    sqlのlimitとdescは一緒に使えますか? 例 select * from hp order by limit id 0,20 order by id desc; idを小さい順に1~20個表示したいです。

    • ベストアンサー
    • MySQL
  • in (サブクエリ) わかんない

    table hh; +------+ | id | +------+ | 1 | | 2 | | 3 | | 2 | | 1 | | 1 | +------+ select id,count(*) as cou from hh group by id having count(*) in (1,2,3); こいつはOK select id,count(*) as cou from hh group by id having count(*) in (select count(*) from hh group by id); こいつはダメ 違いはなんですか、教えて下さい

  • 特定のデータの前後を取得したい

    以下のようなテーブルがあり、 SELECT id , regist_date FROM table_name ORDER BY regist_date DESC; ↑このSQLで並べると↓以下になるとします。 id(int型)   regist_date(datetime型) 12      2017-03-30 08:05:03 95      2017-03-29 19:05:03 72      2017-03-28 12:05:03 15      2017-03-28 12:05:03 62      2017-03-27 15:05:03 94      2017-03-26 12:05:03 やりたい事はidが72というのが分かっており、 そのデータと前後のデータを取得したいです。 ※日付の部分が完全に重複するデータが存在する場合もあります。 ※idは重複しません。 ↓このデータがとりたいです。 95      2017-03-29 19:05:03 72      2017-03-28 12:05:03 15      2017-03-28 12:05:03 SELECT * FROM table_name WHERE id = 72 ORDER BY regist_date DESC; ここから先が分からなくなってしまいどなたかわかる方いらっしゃいますか?

    • ベストアンサー
    • MySQL
  • Acess2003で複雑なSQL?

    Access2003で以下のSQLを実行させることはできるのでしょうか? 直接SQLで実行する方法と、Access独特の両方で実行する方法が知りたいです。 select name, count(*) from テーブル group by name order by 2 desc;

  • MySQLの文法について

    MySQL初心者です 以下の文法でおかしなところがあったら直していただきたいのですが… テーブルの内容などは関係なく,文法がおかしいか見ていただきたいです バージョンは6.0.6を使っています select c_count, count(*) as custdist from ( select c_custkey, count(o_orderkey) from customer left outer join orders on c_custkey = o_custkey and o_comment not like '%special%products%' group by c_custkey ) as c_orders (c_custkey, c_count) group by c_count order by custdist desc, c_count desc; よろしくお願いします><

  • カラムごとに回数を数える方法

    テーブル名:tb event | artist 23 | hamasaki 23 | hamasaki 23 | smap 24 | speed 24 | smap 上のデータは イベント23で浜崎が2曲歌ってSMAPが1曲歌い、 イベント24でスピードが1曲、SMAPが1曲歌ったようなことを考えます。 このようなデータが与えられたときに 浜崎が出演している回数をランキング形式で表示するのに SELECT artist, COUNT( artist ) FROM tb GROUP BY artist ORDER BY COUNT( artist ) DESC とすると同じイベント23で2曲歌っているので 浜崎は2回カウントされます。 これをイベントごとに1回分までしかカウントしない (参加したイベント数)のような意味でカウントするには どうしたらよいでしょうか?

    • ベストアンサー
    • MySQL
  • 秀丸でSQLを書く際に SQLの予約語だけ大文字

    秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。

  • mysql内データ検索結果の表示順について

    mysql内のデータを条件検索する時、検索結果の表示順を指定します。 新着順(id降順)で指定する場合のエラーについてアドバイスをいただけないでしょうか。 例えば、DB内データを降順で全件表示する場合は、 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; とすることでできると思います。 そこで、条件検索で結果表示をする場合は、上記の通りにしてもエラーが発生します。これについてのコードは以下のような感じです。 $query = "SELECT * FROM テーブル名 ORDER BY id DESC"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where); } これは、ORDER BY id DESCを書く位置が悪いのでしょうか? order by句は$query = select ~~~のあとに付けるという認識だったのですが、場合によって間違いとなるということなのでしょうか。 アドバイスをいただければ幸いです。

    • 締切済み
    • PHP