[英]How to get count of id's of one table from another table in oracle
我正在嘗試在Voting上創建一個數據庫項目,其中有一個候選表和一個cast_vote表。 can_id是候選表的pk和cast_vote表的fk。 我想知道在cast_vote中插入了多少次can_id,然后我可以顯示候選人姓名和總投票數。
我希望輸出如下:名稱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)
);
您只是缺少GROUP BY子句。 您需要在group by子句中添加can_id和candidate_name,並考慮多個候選者可以具有相同的名稱。
嘗試這個-
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
你需要一個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;
如果您可以擁有重復的候選名稱,那么您需要通過其ID區分它們:
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.