有两个表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。
我做错了什么?
答案 0 :(得分:0)
请参阅sql Fiddle
使用join
和group 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'