複数フィールドからの合計数を求める方法

このQ&Aのポイント
  • 複数のフィールドから、ユニークな文字列でグループ分けし各々の合計数を数える方法について説明します。
  • 例えば、テーブルにはid、s1、s2というフィールドがあり、s1とs2からユニークな文字列でグループ分けをし、各々の合計数を求めたい場合、どのようなクエリを使用すればよいかについても解説します。
  • MySQL 5.1.22の場合、SELECT句に複数のフィールドを指定してグループ化するクエリを使用することで、複数フィールドからの合計数を求めることができます。
回答を見る
  • ベストアンサー

複数のフィールドから、合計数を求めたい

複数のフィールドから、合計数を求めたい テーブルに複数フィールドがあり、その複数フィールドから、 使われている内容合計数を求めたいと思っています。 例として、 id, s1, s2 というフィールドがあり、 id s1 s2 1 A D 2 A G 3 C 空 4 D G この s1 と s2 からユニークな文字列でグループ分けをし各々の合計数を数えたいです。 (Aは2 Cは1 Dは2 Gは2 といったデータ) 1つのフィールドならば、 SELECT s1, COUNT(s1) FROM table GROUP BY s1 といったクエリでグループ分け及び合計数が求められるのですが、 これを複数のフィールドから行いたい場合の記述方法がわかりません。 宜しくお願いします。 ----------------- 環境  MySQL 5.1.22

  • atse
  • お礼率73% (17/23)
  • MySQL
  • 回答数3
  • ありがとう数9

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

#1、#2です。間違えてましたね、すみません。 「Aを2と読み替える」と読んでました。 S1を見るSelectと、S2を見るSelectをUNION ALLしてから Group BYしてください。 select s, count(s) from (  SELECT s1 as s FROM table  union all  SELECT s2 as s FROM table ) group by s

atse
質問者

お礼

ご回答ありがとうございます。 探していたのはまさにこのような方法でした。 そのままだと、 Every derived table must have its own alias というエラーが出たので、両方を見た結果に名前を付けることで解決できました。 select s, count(s) from(~) as hoge group by s (as hoge 部分) 無事解決です。 本当にありがとうございました!

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> (Aは2 Cは1 Dは2 Gは2 といったデータ) そこでしたか。 OracleにはDecode関数がありますが、MySQLには無い(ハズ) 「Mysql decode」をキーワードに検索サイトで当たってみてください。 解決方法サイトがヒットします。

atse
質問者

補足

ご回答頂きありがとうございます。 googleで検索してみましたが、こちらの理解力がないのか、 Decode関数は、他でいうif文・switch文による条件結果により、 グループ名を返すだけのもの、となってしまうように受け取り、 それをどのように複数フィールドをまたいでのグループ分けに 使用できるのかが想像がつきませんでした。 よろしければ助言を頂ければ幸いです。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

SELECT concat(s1, s2), COUNT(concat(s1, s2)) FROM table GROUP BY concat(s1, s2) だと、どうなります?

atse
質問者

補足

そのままconcatで連結した内容でグループ分けされます。 AD 1 AG 1 C 1 DG 1 質問内容に書いた内容だと、下記のようになることを望んでいます。 (Aは2 Cは1 Dは2 Gは2 といったデータ) A 2 C 1 D 2 G 2

関連するQ&A

  • Access2003複数フィールドの文字数合計

    複数のフィールドに入力されている文字列(数値や文字)の文字数をカウントし、そのレコードごとの合計を1回の更新クエリで算出する方法があれば教えてください。 =========================================================== ☆1つのレコードにA~Eのフィールドがあり、全角・半角の文字および英数字のデータが混在しています。(データの入っていない場合は「null」となる) (例) No  [A]       [B]     [C]       [D]       [E] 1  東京都   港区   ○○1丁目  1-2-3   ●×マンション101 2  神奈川県  横浜市  ○○○町   10-10   △△ビル10F  3    〃      〃     〃       〃        〃    =========================================================== (1) これらの各フィールドの文字数を「LEN関数」を使って、新たなフィールドF~Jに文字数を表示する (2) そして、上記のF~Jの文字数を「SUM関数」を使って、フィールドKへ合計数を表示しています。 (例) No  [F]  [G]   [H]  [I]  [J]   [K] 1   3   2   5   5  10    25 2   4   3   4   5   7     23     =========================================================== 現在は、上記のように、各フィールドの文字数を出してから合計数を計算していますが、 この合計数[K]の値を、フィールドF~Jを作成しなくても一度で計算できるような関数式があれば教えてください。 私は、SQLが書けないので、フィールド欄へ関数式を入力しておりますが、 関数だけでは出来ない場合は、SQLで教えていただければ幸いでございます。 お手数お掛けしますが、宜しくお願い致します。

  • 複数フィールドのカウント

    下記のようなテーブルで下記の結果を得られる SQL文を押していただけばと思います。 Micorosoft SQL Serverの予定です。 テーブル1 XX YY -------------------------- 商品a 商品d 商品b 商品a 商品c 得たい結果 商品a 2 商品b 1 商品c 1 商品d 1 UNIONでくっつけようと いろいろ考えて下記のようにしてみたいのですが SELECT XX,count(XX) FROM テーブル1 GROUP BY XX UNION SELECT YY,count(YY) FROM テーブル1 GROUP BY YY 下記の結果がえてしまい 商品a の結果を合計したです。 商品a 1 商品a 1 商品b 1 商品c 1 商品d 1 XX,YYを一括で集計(COUNT)できる方法やUNIONなどで別のフィールドにある同じ値を合計できる方法などもありましたらよろしくお願いします。

  • Access2003 文字数の合計について

    複数のフィールドに入力されている文字列(数値や文字)の文字数をカウントし, そのレコードごとの文字数合計を出したいのですが、「エラー」になってしまい うまくできないので、アドバイスを頂きたいと存じます。 ========================================================================= ☆1つのレコードA~Eのフィールドがあり、全角・半角の文字および英数字のデータが混在しています。  なお、データの入っていない空欄がところどころにあります。 [手順1] まず、フィールド内にある空白を除くためReplace関数を使って置換するため フィールドへ以下の式を入力します。 B1: Replace([B]," ", "") D1: Replace([D]," ", "") (例) [ID]  [A]         [B]       [C]       [D]            [E]     1  東京都   港区 ○○1丁目  1-2-3   ●×マンション 101  ○○様方 2  神奈川県  横浜市○○○町   10-10    NULL           NULL 3  千葉県   千葉市 ○○○町  NULL    NULL            ○○様方 ========================================================================= [手順2] 空白を取り除いたフィールドの文字数をカウントするためLen関数を使ってカウントするため フィールドへ以下の式を入力します。 文字数: Len('' & [A] & [B] & [C] & [D] & [E]) (例) [ID]  [A]         [B1]       [C]       [D1]           [E]     [文字数]   1  東京都   港区○○1丁目   1-2-3   ●×マンション101   ○○様方     29 2  神奈川県  横浜市○○○町   10-10    NULL           NULL      16 3  千葉県   千葉市○○○町   NULL    NULL           ○○様方     14 ========================================================================= [手順1]~[手順2]を行い、文字数フィールドに合計値が表示されるようにしたいのですが、 [手順1]のクエリ実行でフィールド[D]の空欄に「#エラー」が表示されてしまい、 以下のとおり、[手順2]で文字数を出すことができませんでした。 (例) [ID]  [A]         [B1]       [C]       [D1]           [E]     [文字数]   1  東京都   港区○○1丁目   1-2-3   ●×マンション101  ○○様方     29 2  神奈川県  横浜市○○○町   10-10    #エラー        #エラー     #エラー 3  千葉県   千葉市○○○町   NULL    #エラー        ○○様方     #エラー ========================================================================= 上記のようなエラーを出さずに、文字数合計をしたいので、アドバイスをいただきたいと存知ます。 よろしくお願いいたします。

  • 同じフィールドを複数条件指定して検索をする場合

    やりたいこと。 あるものに対して識別する種別と項目から個体を設定する。 複数種別の識別項目から検索をしたい。 table_a id_a が 個体ID id_b が 個体識別種別ID id_c が 個体識別項目ID table_b s_id が 個体識別種別ID s_name が 個体識別種別名 table_c k_id が 個体識別項目ID k_name が 個体識別項目名 k_sid が 個体識別種別ID 条件: table_aは id_aとid_bでユニークな値になる。 table_cのk_idはユニーク値。 識別種別(table_b)は無制限に増える可能性がある 識別項目(table_c)も無制限に増える可能性がある 種別が可変なのでtable_aに種別分のフィールドを作ることができない。 例) Aさんは手が二本で頭は悪い。 Bさんは手が二本で頭は良い。 Cさんは手が四本で頭は普通。 Dさんは手が複数で頭は悪い。 table_a(id_a,id_b,id_c) A,1,1 A,2,4 B,1,1 B,2,5 C,1,2 C,2,6 D,1,3 D,2,4 table_b(s_id,s_name) 1,手 2,頭 table_c(k_id,k_name,k_sid) 1,1,二本 2,1,四本 3,1,複数 4,2,悪い 5,2,良い 6,2,普通 検索:手が二本で頭が良い人 結果:A 以上のことをやるにはどのようにしたら良いでしょうか。 テーブル構造が悪い場合変更することも検討しています。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • access 抽出したフィールドの合計

    access2010です。 現在、以下のようなクエリがあります。(数値のところがずれて表示されているかもしれませんが、それぞれフィールド毎の値です) [ID] [項目A] [項目B]  [項目C] [項目D] [合計;[項目A]+[項目B]+[項目C]+[項目D]] 1     50    100    100    50 このままデータシートビューにすると[合計]欄は300になります。 表示をAとBとCのみにした場合、合計が250になればいいのですが、300のままです。 AとB、BとCなどいろいろ組み合わせを変えて表示したいのですが、全組み合わせ分のクエリーを作らずに、選択した分のフィールドのみの合計を出す方法はありませんでしょうか。 よろしくお願いします。

  • アクセスのクエリ フィールドの合計

    フィールドの合計 アクセスのクエリでいくつかのフィールドの合計を出そうとして クエリのフィールドに以下の式をいれております。 ⇒合計:([A])+([B])+([C]) (例えば[A][B][C]のフィールドの合計を出すとして) しかし、[A]の値が1、[B]の値が2、[C]の値が2と入っている場合は5と合計値が当然でますが 例えば[C]のフィールドが空欄の場合、合計値欄が空欄で表示されます。 非常に簡単な質問かと恐縮ですがおしえてください!

  • フィールドの欠落

    初めて質問いたします。 テーブルを結合させ「rs.Fields.Count」で フィールド数をカウントすると 実際のフィールド(項目)数よりも一つ減っています。 ※結合しない場合は想定通りのフィールド数になります。 どうも先頭のフィールドが欠落してしまっているようです。 お分かりの方ご教授願います。 以下コード一部 **************************************************************** sql="SELECT * FROM SHORI_TBL A JOIN MST_BATCHGROUP B ON A.BATCHGRP_ID = B.BATCHGRP_ID "_   & "JOIN BATCHGROUP_TBL C ON B.BATCHGRP_ID = C.BATCHGRP_ID "_   & "JOIN MST_BATCH D ON C.BATCH_ID = D.BATCH_ID "_   & "WHERE A.SHORI_ID = '" & Request.Form("shoriId") &"' "_   & "ORDER BY A.BATCHGRP_EXEC_NO,C.BATCH_EXEC_NO "   Set cshoriRs = Server.CreateObject("ADODB.RecordSet")   Rs.Open sql,conn,1,1 **************************************************************** 環境 ----------------------------- Windows2000 server iis5.0 Oracle9i Release 9.2.0.6.0 ------------------------------

  • フィールド数について

    いつもお世話になっております。 MySQL(4.0)を触り始めて1ヶ月少々の者ですが、本や皆様のご意見をもとに学ばせて頂いております。 と、ここでフィールド数に関して質問なのですが、コマンドプロンプトから「create table test(id int...)」と記述していくと、ある一定のところでこれ以上記述できなくなってしまう事があります。 現在、多いもので40弱程のフィールドを持ったテーブルを設置しておりますが、いつもフィールドの追加として、「alter table test add...」と対処している次第です。 これって何処か障害があるのでしょうか? フィールドの追加で事なきを得ているのですが、どうも不可解なもので・・・ご指導のほど宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 複数フィールドの一括カウントはできませんか?

    MS-ACCESS2000です。 ID|field1 |field2|・・・ -------------------- 1 |10 |30 | 2 |20 |10 | 3 |30 |20 | 4 |10 |20 | 5 |30 |20 | ・ |10 |30 | ・ |30 |20 | ・ |10 |10 | 上記のようなテーブルについて、各フィールド毎の、 10、20、30それぞれの件数カウントしたいんです。 得たい結果としては、以下のようなものです。  |field1|field2|・・・ -------------------- 10|5(件) |30(件)| 20|11(件)|9(件) | 30|7(件) |22(件)| このフィールド数ですが、全部で200ありまして、 以前ここの回答で拝見した、 SELECT point, count(*) FROM Point GROUP BY point.point; ではとても処理できそうにないもので・・・。 どなたか、お知恵を頂ければありがたいです。 どうか、よろしくお願い致します。

  • 再投稿:フィールドの値をテーブル名&フィールド名にして参照したい

    すみません。若干記入ミスだったので再投稿します。 こちらにご解答お願いします。 TABLE_a ・Ta_id ・key_table ・key_field ・key_no TABLE_b ・Tb_id ・Tb_name TABLE_c ・Tc_id ・Tc_name と3つのテーブルがあり、 key_tableに「TABLE_b」、key_fieldに「Tb_id」が入ってて、 TABLE_aとTABLE_bを select の left join して抽出したい場合、 どういうSQL文になるのでしょうか。 select * from TABLE_a left join case key_table when 'TABLE_b' then 'TABLE_b' when 'TABLE_c' then 'TABLE_c' end on 'TABLE_a.key_field'.key_no = case key_table when 'TABLE_b' then ''TABLE_a.key_table'.Tb_id' when 'TABLE_c' then ''TABLE_a.key_table'.Tc_id' end ; とやってみたのですが、うまくできませんでした。 ご教示お願いします。