2009-12-05 141 views
2

鉴于以下两个表:帮助MySQL查询

  1. 用户(user_ID的,用户名,位置, 电子邮件)
  2. 票(user_ID的,值,日期,IP)

我如何执行MySQL查询来为每个用户返回总票数和总票数的所有用户?

谢谢。

回答

3
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 
+1

在这种情况下,而不是“左外连接票v中u.user_id = v.user_id”可以使用“天然左加入投票v“ – Alex 2009-12-05 21:42:40

+0

+1加入,而不是子选择。 – outis 2009-12-05 21:44:31

+1

@Alex:或'JOIN投票AS v USING user_id'。这并不重要。 – outis 2009-12-05 21:46:39

0

这个工作对我来说:

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)