簡體   English   中英

如何在oracle中從另一個表中獲取一個表的id的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM