Оператор SELECT с использованием трех разных таблиц - PullRequest
0 голосов
/ 03 июня 2018

Примечание: Я не был уверен, как озаглавить это, если у кого-то есть лучшая идея, не стесняйтесь изменить его.


Моя база данных в настоящее время имеет следующие таблицы (некоторые столбцыи другие детали были удалены из выходных данных показанных команд, но они не должны быть релевантными):

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;

Как мне изменить этот запрос, чтобы найти три лучшие команды?

1 Ответ

0 голосов
/ 03 июня 2018

Короче, я хотел бы найти три команды, которые наберут наибольшее количество очков.

Вы можете использовать:

SELECT challengesolve.team_id,SUM(challenge.points) AS points 
FROM challengesolve 
INNER JOIN challenge
ON challenge.id = challengesolve.challenge_id 
GROUP BY challengesolve.team_id
ORDER BY points DESC
LIMIT 3;
...