そのクエリだと単純に試験の数を取得しているだけになっていると思います。
各ユーザーが受験した試験の数を取得するのであれば、
「usersテーブル」に「scoresテーブル」を結合して、「user_id」ごとに集計した「exam_id」の数を取得する必要があると思います。
ユーザの情報も合わせて取得するのであれば、
サブクエリを用いて「user_idごとに集計したscoresテーブル」を「usersテーブル」に結合するほうが適切かもしれません。
全てのユーザーデータと、各ユーザーが受験したexmasの数を取得しろ。というSQLの問題が解けません。
テーブルの構造は以下の通りです。
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS classes;
DROP TABLE IF EXISTS exams;
DROP TABLE IF EXISTS scores;
CREATE TABLE users (
id integer PRIMARY KEY AUTOINCREMENT,
name text NOT NULL
);
CREATE TABLE classes (
id integer PRIMARY KEY AUTOINCREMENT,
name text NOT NULL
);
CREATE TABLE exams (
id integer PRIMARY KEY AUTOINCREMENT,
class_id integer NOT NULL,
name text NOT NULL
);
CREATE TABLE scores (
id integer PRIMARY KEY AUTOINCREMENT,
user_id integer NOT NULL,
exam_id integer NOT NULL,
score integer NOT NULL,
FOREIGN KEY(user_id) REFERENCES users(id),
FOREIGN KEY(exam_id) REFERENCES exams(id)
);
以下のように回答したのですが不正解のようなので、ご回答お願い致します。
SELECT count (*) as num_of_users_exam
FROM exams
そのクエリだと単純に試験の数を取得しているだけになっていると思います。
各ユーザーが受験した試験の数を取得するのであれば、
「usersテーブル」に「scoresテーブル」を結合して、「user_id」ごとに集計した「exam_id」の数を取得する必要があると思います。
ユーザの情報も合わせて取得するのであれば、
サブクエリを用いて「user_idごとに集計したscoresテーブル」を「usersテーブル」に結合するほうが適切かもしれません。
@bon_sai_se
Questioner教材の問題です!
一応以下のように書いてみました。
間違っていることはなんとなくわかるのですが、どこを直せばいいかわかりません...。
SELECT count (*) as num_of_users_exam
FROM (users INNER JOIN scores ON user_id = exam_id)
group by exam_id;
クエリを書くときは取りたい情報を分離して考えるといいと思います。
今回であれば、まずユーザごとの試験の数を取得。
そして、ユーザに結合して取得、という感じです。
こちらが私が書いてみたクエリです。
ご参考にしてください。