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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

527閲覧

SQLで集計した結果を加える

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/03/18 13:32

前提

このような3つのテーブルがあり、

articleテーブル(記事を投稿するテーブル)

idtitleuser_id
1RubyonRailsに関する記事1
2Javaに関する記事2
3swiftに関する記事2

categoryテーブル(記事カテゴリーのテーブル)

idname
1RubyonRails
2Java
3swift

category_articleのテーブル(中間テーブル)

article_idcategory_id
11
22
33

リレーションが定義されています

実現したいこと

category_articleを起点にして

sql

1select 2category_article.article_id, 3category_article. category_id, 4article.user_id 5from category_article 6left join article on category_article.article_id = article.id

としたあとに

user_idが全体でいくつあるかを集計したものを追加するSQLの書き方はありますでしょうか?

EX

user_id 2は 全体では2つあるので countは2

article_idcategory_iduser_idcount
1111
2222
3322

初心者なので、ご教示いただけると幸いです

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

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

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

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

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

m.ts10806

2020/03/18 14:07

再現確認するため、関係するテーブルのCREATE TABLE文とサンプルデータのINSERT文をご提示ください。 また、タグより「MySQL」とのことですが、バージョンは幾つでしょうか。
hoshi-takanori

2020/03/18 19:58

サブクエリーを使えばできると思いますが、一つの記事に複数の category_id がある場合はどうしましょう?
guest

回答1

0

ベストアンサー

とりあえずこんな感じでしょうか。(category と article は多対多にしてみました。)
https://www.db-fiddle.com/f/muBACYLE8v8UtVUNFGXzAL/0

データベース定義

sql

1create table article ( 2 id int primary key, 3 title varchar(255), 4 user_id int 5); 6 7insert into article values (1, 'RubyonRailsに関する記事', 1); 8insert into article values (2, 'Javaに関する記事', 2); 9insert into article values (3, 'swiftに関する記事', 2); 10 11create table category ( 12 id int primary key, 13 name varchar(255) 14); 15 16insert into category values (1, 'RubyonRails'); 17insert into category values (2, 'Java'); 18insert into category values (3, 'swift'); 19 20create table category_article ( 21 article_id int references article (id), 22 category_id int references category (id), 23 primary key (article_id, category_id) 24); 25 26insert into category_article values (1, 1); 27insert into category_article values (2, 2); 28insert into category_article values (3, 3); 29 30insert into category_article values (1, 3); 31insert into category_article values (3, 2);

問い合わせ

sql

1select 2category_article.article_id, 3category_article. category_id, 4article.user_id, 5(select count(*) from article a where a.user_id = article.user_id) as count 6from category_article 7left join article on category_article.article_id = article.id;

実行結果

+------------+-------------+---------+-------+ | article_id | category_id | user_id | count | +------------+-------------+---------+-------+ | 1 | 1 | 1 | 1 | | 1 | 3 | 1 | 1 | | 2 | 2 | 2 | 2 | | 3 | 2 | 2 | 2 | | 3 | 3 | 2 | 2 | +------------+-------------+---------+-------+

投稿2020/03/18 20:21

hoshi-takanori

総合スコア7895

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

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

退会済みユーザー

退会済みユーザー

2020/03/18 21:24

ありがとうございます 質問頂いてたことですが articleに複数のcategoryを紐づくイメージになります。 なので一対多ですかね。
hoshi-takanori

2020/03/18 21:43

一つの記事に複数のカテゴリーを紐づけられるということだと思いますが、通常一つのカテゴリーには複数の記事があるでしょうから、多対多になるのでは。一対多なら中間テーブルは不要ですし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問