2
鉴于以下两个表:帮助MySQL查询
- 用户(user_ID的,用户名,位置, 电子邮件)
- 票(user_ID的,值,日期,IP)
我如何执行MySQL查询来为每个用户返回总票数和总票数的所有用户?
谢谢。
鉴于以下两个表:帮助MySQL查询
我如何执行MySQL查询来为每个用户返回总票数和总票数的所有用户?
谢谢。
select u.user_id,
(select count(user_id)
from votes v
where v.user_id = u.user_id) as num_votes,
(select sum(value)
from votes v
where v.user_id = u.user_id) as sum_votes
from users u
# if you want: order by ...
编辑:子选择不是最优雅的解决方案,而不是真的有必要。因此,这里的外部连接的版本:
select u.user_id, count(v.user_id) as num_votes, sum(v.value) as sum_votes
from users u
left outer join votes v
on u.user_id = v.user_id
group by u.user_id
这个工作对我来说:
create table user
(
id int not null auto_increment,
name varchar(80) not null,
location varchar(80) default '',
email varchar(80) default '',
primary key(id)
);
create table vote
(
id int not null auto_increment,
count int not null,
election_date date,
user_id int,
primary key(id),
foreign key(user_id) references user(id)
);
select
user.name, user.email, sum(vote.count)
from user
left join
vote
on user.id = vote.user_id
group by (user_id)
在这种情况下,而不是“左外连接票v中u.user_id = v.user_id”可以使用“天然左加入投票v“ – Alex 2009-12-05 21:42:40
+1加入,而不是子选择。 – outis 2009-12-05 21:44:31
@Alex:或'JOIN投票AS v USING user_id'。这并不重要。 – outis 2009-12-05 21:46:39