前提
MySQL 5.7
ユーザが気に入ったコミックを投票するシステムがあり、以下のテーブル構造を持っています。
ユーザの属性は一般ユーザと管理ユーザの2種類あり、usersのadmin(1が入っていれば管理者)カラムで管理しています。
実現したいこと
雑誌と、その雑誌が持つコミックの内、最も管理者ユーザに投票されたコミック1件を結合させて取得するSQLを教えていただきたいです。
結合するイメージとしては以下です。
結合したいテーブルに色を付けています。
雑誌A - コミックA:コミックAが最も管理者ユーザからの投票が多いため
雑誌B - コミックC:コミックCが最も管理者ユーザからの投票が多いため
雑誌C - なし:管理者ユーザの投票がないため、取得しない
サンプル
SQL
1-- Create 2CREATE TABLE users ( 3 id integer, 4 name varchar(100), 5 admin integer 6); 7 8CREATE TABLE votes ( 9 id integer, 10 comic_id integer, 11 user_id integer 12); 13 14CREATE TABLE comics ( 15 id integer, 16 magazine_id integer, 17 name varchar(100) 18); 19 20CREATE TABLE magazines ( 21 id integer, 22 name varchar(100) 23); 24 25-- Insert 26-- ユーザ 27insert into users(id, name, admin) values(1, "一般ユーザA", 0); 28insert into users(id, name, admin) values(2, "管理者ユーザA", 1); 29 30-- 雑誌 31insert into magazines(id, name) values(1, "雑誌A"); 32insert into magazines(id, name) values(2, "雑誌B"); 33insert into magazines(id, name) values(3, "雑誌C"); 34 35-- コミック 36insert into comics(id, magazine_id, name) values(1, 1, "コミックA"); 37insert into comics(id, magazine_id, name) values(2, 1, "コミックB"); 38insert into comics(id, magazine_id, name) values(3, 2, "コミックC"); 39insert into comics(id, magazine_id, name) values(4, 3, "コミックD"); 40 41-- 投票 42insert into votes(id, comic_id, user_id) values(1, 1, 1); 43insert into votes(id, comic_id, user_id) values(2, 1, 2); 44insert into votes(id, comic_id, user_id) values(3, 1, 2); 45insert into votes(id, comic_id, user_id) values(4, 2, 1); 46insert into votes(id, comic_id, user_id) values(5, 2, 1); 47insert into votes(id, comic_id, user_id) values(6, 2, 1); 48insert into votes(id, comic_id, user_id) values(7, 3, 1); 49insert into votes(id, comic_id, user_id) values(8, 3, 2); 50insert into votes(id, comic_id, user_id) values(9, 4, 1);
補足
- 管理者ユーザが投票したコミックが存在しなれば、その雑誌は取得しない
回答2件
あなたの回答
tips
プレビュー