LoginSignup
bon_sai_se
@bon_sai_se (凡才 SE)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SQL countに関する問題が解けません

Q&AClosed

解決したいこと

全てのユーザーデータと、各ユーザーが受験した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

0

3Answer

そのクエリだと単純に試験の数を取得しているだけになっていると思います。

各ユーザーが受験した試験の数を取得するのであれば、
「usersテーブル」に「scoresテーブル」を結合して、「user_id」ごとに集計した「exam_id」の数を取得する必要があると思います。

ユーザの情報も合わせて取得するのであれば、
サブクエリを用いて「user_idごとに集計したscoresテーブル」を「usersテーブル」に結合するほうが適切かもしれません。

0

Comments

  1. @bon_sai_se

    Questioner
    ご回答ありがとうございます。
    恥ずかしながら、先日勉強を始めたばかりで、テーブル結合に関しても知らなかったため先ほど調べさせていただいたのですが、この問題ではどのようにコードを書けばいいか教えていただきたいです。
  2. こちらの問題は何かの教材か何かでしょうか?

    このレベルの問題が出るということは、事前に集計(GROUP BY)や結合(JOIN)、サブクエリなどは学習していませんでしょうか?
    それらを組み合わせれば、きっと求められているクエリがかけると思います!
    クエリのイメージはお伝えしたので、一度ご自身でクエリを書いてみてください。

    調べてもわからないところなどあれば、こちらにまたご記載ください。

教材の問題です!
一応以下のように書いてみました。
間違っていることはなんとなくわかるのですが、どこを直せばいいかわかりません...。

SELECT count (*) as num_of_users_exam
FROM (users INNER JOIN scores ON user_id = exam_id)
group by exam_id;

0

クエリを書くときは取りたい情報を分離して考えるといいと思います。

今回であれば、まずユーザごとの試験の数を取得。
そして、ユーザに結合して取得、という感じです。

こちらが私が書いてみたクエリです。
ご参考にしてください。

0

Your answer might help someone💌