Примечание: Я не был уверен, как озаглавить это, если у кого-то есть лучшая идея, не стесняйтесь изменить его.
Моя база данных в настоящее время имеет следующие таблицы (некоторые столбцыи другие детали были удалены из выходных данных показанных команд, но они не должны быть релевантными):
webserver=> \d+ team
Column | Type | Modifiers | Storage
-------------+------------------------+---------------------------------------------------+----------
id | integer | not null default nextval('team_id_seq'::regclass) | plain
name | character varying(255) | not null | extended
Indexes:
"team_pkey" PRIMARY KEY, btree (id)
"team_name" UNIQUE, btree (name)
Referenced by:
TABLE "challengesolve" CONSTRAINT "challengesolve_team_id_fkey" FOREIGN KEY (team_id) REFERENCES team(id)
webserver=> \d+ challenge
Column | Type | Modifiers | Storage
--------------------+------------------------+--------------------------------------------------------+----------
id | integer | not null default nextval('challenge_id_seq'::regclass) | plain
name | character varying(255) | not null | extended
points | integer | not null | plain
Indexes:
"challenge_pkey" PRIMARY KEY, btree (id)
Referenced by:
TABLE "challengesolve" CONSTRAINT "challengesolve_challenge_id_fkey" FOREIGN KEY (challenge_id) REFERENCES challenge(id)
webserver=> \d+ challengesolve
Column | Type | Modifiers | Storage
--------------+-----------------------------+-----------+---------
team_id | integer | not null | plain
challenge_id | integer | not null | plain
Indexes:
"challengesolve_pkey" PRIMARY KEY, btree (team_id, challenge_id)
"challengesolve_challenge_id" btree (challenge_id)
"challengesolve_team_id" btree (team_id)
Foreign-key constraints:
"challengesolve_challenge_id_fkey" FOREIGN KEY (challenge_id) REFERENCES challenge(id)
"challengesolve_team_id_fkey" FOREIGN KEY (team_id) REFERENCES team(id)
Таблицы team
и challenge
должны быть достаточно понятны.Таблица challengesolve
- это таблица пересечений, показывающая, какие команды решили какие задачи.
Короче говоря, я хотел бы найти три команды, которые набрали наибольшее количество очков.Мне уже известно, что я могу найти количество баллов, которое имеет конкретная команда, с помощью такого выражения, как
SELECT SUM(challenge.points) AS points
FROM challengesolve
INNER JOIN challenge
ON challenge.id = challengesolve.challenge_id
WHERE challengesolve.team_id = 1;
Как мне изменить этот запрос, чтобы найти три лучшие команды?