• ベストアンサー

SQLite3のGROUP_CONCA

初歩的な質問かもしれませんが、お願いします。 SQLite3のGROUP_CONCAT(DISTINCT後に文字並べ替えをしたいです。 現在はGROUP_CONCAT(DISTINCTで 特別コース,B1コース,A3コース,A1コース の様にランダムで表示されているのですが、 A1コース,A3コース,B1コース,特別コース の様に並べ替えがしたいです。 SQLite3ではMYSQLの様にORDER BY FIELDが使えず困っています。 いい方法がないかアドバイスいただけると助かります。m(_ _)m

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

group_concatの結合は出現順なので、先にソートしたサブクエリテーブルで集計するのはどうでしょう?対象件数があまり多いと一時テーブル作るのによけいな時間がかかるけど。 例 select k , group_concat(distinct v) as vlist, count(*) as cnt from (select k,v from tbl order by k,v) as tmp group by k ;

dotred
質問者

お礼

ありがとうございます。

関連するQ&A

  • グループ化したあとソートしたい

    MySQL4.1(Windows)での質問です。 以下のようなテーブルのA列をグループ化して、そのcount(A)の値でソートしたいのですが、エラーになってしまい、実行できません。どうすれば良いでしょうか? テーブル A|B ----- 0|aaa 1|bbb 2|ccc 1|ddd 1|eee 0|fff クエリ select A,count(A) from table group by A order by count(A) 表示させたいデータ A|count(A) ---------- 1|3 0|2 2|1

    • ベストアンサー
    • MySQL
  • GROUP BY と DISTINCT

    SQLPLUSにおいて、ある表X1(code1,code2)に (A,1),(A,1),(A,2),(A,2),(A,3),(A,3) (B,4),(B,4),(B,5),(B,5),(B,6),(B,6) というデータがあり、別の表X2(data1,data2)に (1,10),(2,20),(3,30),(4,40),(5,50),(6,60) というデータがある場合に(X2の左の要素はprimary) 結果として(A,60),(B,150)というデータを得たいのですが、GROUP BY や DISTINCT を使おうするとエラーになってしまいうまくいきません。 <select code1,sum(data2) from X1,X2 where distinct(X1.code2) = X2.data1 group by code1> みたいな感じでやりたいのですが、(distinctがこの使い方でできないのはわかってます)どうしたらいいでしょうか? ちなみに副問合せを使って先にX1から(A,1),(A,2)...(B,6)をセレクトしようとしてもダメでした。 説明がわかりづらくて申し訳ございませんがどなたか詳しい方のアドバイスをお願い致します

  • group化による件数順で表示

    初歩的質問かとは思いますが、下記の後に order by [件数]のように並べ替えをするにはどのようにしたらよいでしょうか。このままくっつけるとダメなようで。 sSQL = "SELECT Author,count(MsgID) as 件数 FROM messages group by Author #access Jetです。

  • SQLのSELECT文でのランダム抽出について

    SQLのSELECT文でのランダム抽出について データベースSQLiteでSELECT文の結果をランダムに抽出するには ORDER BY RANDOM()を使うようですが、前回ランダムに抽出された順序と同じ結果を得るにはどのようにすればよいでしょうか。 MySQLの場合は、ORDER BY RAND(n)でnの値を同じにすれば、同じ順序で抽出できるようですが、SQLiteでは無理なようです。 今考えているのはRANDOM()で得られた列の一つ(たとえばID)を一時的に別のテーブルを作成して保存後、その一時テーブルを利用するというものですが、もっと良い方法があるのではと思います。 何か別の方法がありましたら、教えていただきたくよろしくお願いいたします。

  • SQL文「DISTINCT」の「ORDER BY」について

    SQL文「DISTINCT」の「ORDER BY」について教えて下さい。 A列をDISTINCTで重複行の排除をしています。 その後、B列でORDER BYをかけたいのですが、エラーが 出てしまいます。A列でのORDER BYは成功します。 何か良い方法があれば教えて下さい。 よろしくお願いします。 SQL="SELECT DISTINCT A列 from table " &_ "WHERE (table.C列='100') " &_ "ORDER BY (table.B列) ASC " ⇒エラー    "ORDER BY (table.A列) ASC " ⇒成功

  • 並び替え

    お願いします MySQLを使ってクエリーを書いているのですが 例えば[test]というフィールドがあったとして そのフィールドにa,b,cというデータが入っているとし データを取り出す場合 ORDER BY句を使ってaから取り出す方法とcから取り出す方法はわかるのですが bから取り出すことというのはできるのでしょうか? よろしくお願いします

    • ベストアンサー
    • MySQL
  • GROUP BYについて

    初歩的な質問になってしまいますが、GROUP BYの使い方について解らない点があるので、宜しくお願いします。 次のようなボーリング大会のレコードがあったとして、 ========bowling TBL (以下、フィールド名)===================== 氏 名|ゲーム回数|1投目|2投目|3投目|・・10投目| ============================================================ 注※ゲーム回数はintで1からインクリメントしていく。 氏名別に1番最後に行ったゲームを参照したい場合 ●SELECT 氏名 MAX(ゲーム回数) GROUP BY 氏名 で、 ----------------------------------------------------- Aさん|3| Bさん|5| ----------------------------------------------------- が得られますが、更にこの最終ゲームでの1投目と2投目の結果のみを付け足し、 ----------------------------------------------------- Aさん|3|12本|19本| Bさん|5|03本|15本| ----------------------------------------------------- のように参照したい場合、どのようなSQL文になるのでしょうか? どなたかご教示宜しくお願いします。

    • ベストアンサー
    • MySQL
  • グループからランダムに抽出する方法

    レコードをグループ化して、そのグループから1レコードをランダムに選択する方法はないでしょうか? 具体的には、たとえば以下のようなことです。 以下のようなテーブルがあるとします。  組 氏名 ----------------- A組 鈴木 A組 木村 B組 山田 B組 佐藤 B組 田中 C組 石井 C組 井上 D組 田口 このテーブルから、各組から代表を1人ずつランダムに選びたいです。 たとえば、 A組 鈴木 B組 田中 C組 石井 D組 田口 というように、A組には2人いますが1人をランダムに、B組には3人いますが1人をランダムに、…、という感じです。 集合関数には合計や平均などの数学関数はあるのですが、このようなことを実現するものが見あたりません。 現在は、まず先に組でグループ化したクエリを実行し、A組から順番に SELECT ~ WHERE 組="A組" ORDER BY RND() LIMIT 1 を実行、次に SELECT ~ WHERE 組="B組" ORDER BY RND() LIMIT 1 … というように、いちいち全組分を繰り返していますが、もっと良い方法がありましたら、ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • accessでDISTINCT 句と矛盾

    IIFで置き換えをした結果をソートしようとしましたが、 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,c [Microsoft][ODBC Microsoft Access Driver] ORDER BY 句 (c) が DISTINCT 句と矛盾しています。 というエラーになりました。 正しいSQLを教えてください。 SELECT DISTINCT a,IIF(IsNull(b), 0, 1) AS c FROM shain ORDER BY a,b も試しましたが同じようにエラーになりました。

  • 複数行のグループ集計とカウント

    下記の内容のようにグループ化してその後さらにグループ化してカウントを取る方法をお教えください。出来れば一回の処理で終わる方法が知りたいです。 大変お手数ですがよろしくお願いします。 例 t_id  t1  t2  1   a  1  2   a  1  3   a  2  4   a  3  5   b  4  6   b  4  7  ETC 5 ※1行目がフィールド名で2行目以降がデータです 1.上記の例のテーブルのt2のフィールドをグループ化し同じ数値をひとまとめにします >SELECT * FROM テーブル名 GROUP BY t2; t_id  t1  t2  1   a  1  3   a  2  4   a  3  5   b  4  7  ETC  5 2.この状態でt1のフィールドをグループ化してt1のカテゴリーのカウントをとり以下のような感じの結果を出したいと考えています。  t1 Count  a   3  b   1  ETC  1 このような処理を表示させるようにするにはどのようにしたらよろしいのでしょうかお教えください。 環境はmysql5.0を使用しております。

    • ベストアンサー
    • MySQL