- ベストアンサー
複数フィールドからの合計数を求める方法
- 複数のフィールドから、ユニークな文字列でグループ分けし各々の合計数を数える方法について説明します。
- 例えば、テーブルにはid、s1、s2というフィールドがあり、s1とs2からユニークな文字列でグループ分けをし、各々の合計数を求めたい場合、どのようなクエリを使用すればよいかについても解説します。
- MySQL 5.1.22の場合、SELECT句に複数のフィールドを指定してグループ化するクエリを使用することで、複数フィールドからの合計数を求めることができます。
- みんなの回答 (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
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
> (Aは2 Cは1 Dは2 Gは2 といったデータ) そこでしたか。 OracleにはDecode関数がありますが、MySQLには無い(ハズ) 「Mysql decode」をキーワードに検索サイトで当たってみてください。 解決方法サイトがヒットします。
補足
ご回答頂きありがとうございます。 googleで検索してみましたが、こちらの理解力がないのか、 Decode関数は、他でいうif文・switch文による条件結果により、 グループ名を返すだけのもの、となってしまうように受け取り、 それをどのように複数フィールドをまたいでのグループ分けに 使用できるのかが想像がつきませんでした。 よろしければ助言を頂ければ幸いです。
- bin-chan
- ベストアンサー率33% (1403/4213)
SELECT concat(s1, s2), COUNT(concat(s1, s2)) FROM table GROUP BY concat(s1, s2) だと、どうなります?
補足
そのまま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
お礼
ご回答ありがとうございます。 探していたのはまさにこのような方法でした。 そのままだと、 Every derived table must have its own alias というエラーが出たので、両方を見た結果に名前を付けることで解決できました。 select s, count(s) from(~) as hoge group by s (as hoge 部分) 無事解決です。 本当にありがとうございました!