获取查询结果,其中一列是另一个表中列的条件和

时间:2015-05-19 13:01:01

标签: mysql

有两个表u和pp。pp中的每个条目都使用两个唯一标识符user和proyect来索引名为participation的第三个值。

因此,如果我想获得所有项目的参与总和为单个用户(在此示例中为用户2),我会这样做:

SELECT SUM(participation) AS sum FROM pp WHERE user='2'

这很有效。但是我想要的是用户数据(名称和姓氏)以及表U中的总参与度,每个用户都有一个名为keyid的唯一标识符,它对应于表pp的用户值。如果可能的话,我希望如此仅在1个查询中获取我的所有数据。所以这就是我尝试过的:

SELECT u.name, u.lastname , u.username, u.keyid, SUM(pp.participation) FROM u, pp WHERE pp.user=u.keyid;

提供建议的示例。

表格包含

user proyect participation
1    1       25   
1    2       36
2    1       51   
2    2       6

Table u
name  lastname  username keyid
John  Doe       jdoe     1  
Jane  Doef      janed    2

我的结果是

name  lastname  username sum
John  Doe       jdoe     61  
Jane  Doef      janed    57

然而,这给了我一个结果,其中sum列是整个参与列的SUM。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

请参阅sql Fiddle

使用joingroup by

SELECT 
  u.name, 
  u.lastname , 
  u.username, 
  u.keyid, 
  SUM(pp.participation) 
FROM u
join pp
WHERE pp.user=u.keyid
group by u.keyid

答案 1 :(得分:0)

尝试使用LEFT JOIN和GROUP BY语句。 LEFT JOIN可帮助您将一个表与另一个表相关联。 GROUP BY将对行进行分组并对每个组应用SUM

SELECT u.name, u.lastname , u.username, u.keyid, SUM(pp.participation) FROM pp LEFT JOIN u ON pp.user = u.keyid GROUP BY pp.user
编辑:对不起,伊兰在我写作时回答了

编辑2:如果您想要所有数据,但对于特定用户,您仍然可以使用WHERE子句:

SELECT u.name, u.lastname , u.username, u.keyid, SUM(pp.participation) FROM pp LEFT JOIN u ON pp.user = u.keyid WHERE pp.user = '2'