Как получить количество идентификаторов одной таблицы из другой таблицы в оракуле - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь создать проект базы данных для голосования, в котором есть таблица кандидатов и таблица cast_vote. Can_id представляет собой pk таблицы-кандидата и fk таблицы cast_vote. Я хочу знать, сколько раз can_id был вставлен в cast_vote, и затем я могу показать имя кандидата и общее количество голосов.

Я хочу, чтобы вывод был таким: Имя Aff_party Total_vote (cast_vote)

 select candidate.name
  2  count(cast_vote.can_id) as t_v
  3  from candidate
  4  left join cast_vote on candidate.can_id=cast_vote.can_id
  5  ;

create table voter(
    voter_id number(8),
    full_name varchar(20),
    gender varchar(7),
    seat_no number(5),
    age number(3) check (age>=18),
    primary key (voter_id)
);

create table candidate(
    can_id number(8),
    name varchar(256),
    age number(3) check (age>=18),
    gender varchar(7),
    aff_party varchar(256),
    seat_no number(5),
    seat_name varchar(256),
    net_income number(8),
    primary key(can_id)
);

create table cast_vote(
    vote_no number(15) not null,
    voter_id number(8) not null unique,
    can_id number(8),
    primary key(vote_no),
    foreign key (voter_id) references voter(voter_id),
    foreign key(can_id) references candidate(can_id)
);

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Вам нужен GROUP BY. Если у вас нет повторяющихся имен кандидатов:

SELECT c.name, c.aff_party, COUNT(cv.can_id) as t_v
FROM candidate c LEFT JOIN
     cast_vote cv
     ON c.can_id = cv.can_id
GROUP BY c.name, c.aff_party;

Если у вас могут быть повторяющиеся имена кандидатов, вы можете различить их по их идентификаторам:

SELECT c.can_id, c.name, c.aff_party,
       COUNT(cv.can_id) as t_v
FROM candidate c LEFT JOIN
     cast_vote cv
     ON c.can_id = cv.can_id
GROUP BY c.can_id, c.name, c.aff_party;

Обратите внимание, что каждый неагрегированный столбец в SELECT также находится в GROUP BY.

0 голосов
/ 15 июня 2019

Вы просто пропустили предложение GROUP BY.Вам нужно добавить и can_id, и expert_name в предложении group by, учитывая, что несколько кандидатов могут иметь одно и то же имя.

Попробуйте это-

SELECT C.can_id,
C.name,
COUNT(CV.can_id) AS t_v
FROM candidate C
LEFT JOIN cast_vote CV on C.can_id=CV.can_id
GROUP BY C.can_id,C.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...