質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

3回答

1304閲覧

MySQLにて別々に集計した結果を横並びで取得したい

komet

総合スコア13

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2020/02/26 15:33

質問投稿機能を作成している者です。
環境はMySQLを使っており、以下のような構成のテーブルがあります。

MySQL

1select * from questions;
questionID
1
2
3

MySQL

1select * from answerTable;
answerIDquestionID
11
22
32
43
53
63

MySQL

1select * from questionReaction
reactionIDquestionIDreaction
110
211
320
420
521
631
731
830

ここで

MySQL

1select questionID , sum(reaction=0) as goodCount , sum(reaction=1) as badCount 2 from questionReaction group by questionID ;

とすると

questionIDgoodCountbadCount
111
221
312

が得られました(この結果をAとします)。さらに

MySQL

1select questionID, count(questionID) as answerValue from answerTable group by questionID;

とすると

questionIDanswerValue
11
22
33

が得られました(この結果をBとします)。ここでやりたいことが、AとBを結合し、

questionIDanswerValuegoodCountbadCount
1111
2221
3312

と表示したいです。大変長くなってしまい申し訳ありません。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

テーブルごとに集計したものを結合します。

SQL

1select Q.questionID 2 , coalesce(A.answerValue, 0) as answerValue 3 , coalesce(Q.goodCount, 0) as goodCount 4 , coalesce(Q.badCount, 0) as badCount 5from ( 6 select questionID, sum(reaction=0) as goodCount, sum(reaction=1) as badCount 7 from questionReaction 8 group by questionID 9 ) Q left join ( 10 select questionID, count(questionID) as answerValue 11 from answerTable 12 group by questionID 13 ) A 14 on Q.questionID=A.questionID

投稿2020/02/27 02:09

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

2つSQLの結果をUNIONしてみました。questionsも加えました

sql

1select questionID, 2 sum(answerValue) answerValue, 3 sum(goodCount) goodCount, 4 sum(badCount) badCount 5from (select questionID ,0 as answerValue, sum(reaction=0) as goodCount,sum(reaction=1) as badCount 6 from questionReaction group by questionID 7 union all 8 select questionID, count(questionID) as answerValue, 0 , 0 from answerTable group by questionID 9 union all 10 select questionID, 0, 0, 0 from questions 11) tbl1 12join questions using(questionID) 13group by questionID order by questionID;

投稿2020/02/26 23:54

編集2020/02/27 00:06
amura

総合スコア333

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問のテーブル定義はCREATE TABLEに、テーブル中のデータはINSERTに訂正できたほうがSQLを実行できるので的確なコメントが付き易いかと。

SQL

1select QR.questionID 2 , count(QR.questionID) as answerValue 3 , sum(QR.reaction=0) as goodCount 4 , sum(QR.reaction=1) as badCount 5from questionReaction QR 6inner join answerTable AT 7on QR.questionID = AT.questionID 8group by QR.questionID ;

投稿2020/02/26 16:14

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/02/27 03:25 編集

結合しているから件数が変わります。それを考慮しないと。 また、innerしているというのもanswerが無い場合にreactionnoの件数が出ませんし。
Orlofsky

2020/02/27 04:41

忘れていました。 質問者はCREATE TABLEやINSERTを追加する気配がないのは新型コロナウイルスがらみではないことを祈ります。 27日午前10時半の時点で日本国内で感染が確認された人は、... 合わせて894人。このうち死亡したのは...7人。 https://www3.nhk.or.jp/news/html/20200227/k10012303921000.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問