2017-10-05 47 views
0

说我有两个表,PeopleInvoicesMySQL - 跨多个表的算术

人民

firstname postcode 
Alex   2403 
Peter  2357 
Michael  3456 

发票

person  earned 
Alex   12300 
Alex   3556 
Peter  1000 
Alex   234 
Michael  10000 

我要添加到人列名为收入呈现每个人的总收入 - 我怎么可能实现呢?

我认为表应加入:

INNER JOIN Invoices ON People.firstname = Invoices.person 

但我然后不知道该如何再总结和组相应获得成收入(我假设COUNT(*)在某处使用)的钱。

+0

你通常不会储存器获得的数据 – Strawberry

+0

@ user5226582我知道,这将是必要的,以产生正确的结果(问题的最后一段),以及两者如何工作,但因为我只学习SQL在这种情况下,我对于正确的实现非常朦胧 –

回答

1

这显然很酥依托“姓”和“人”作为一个连接,如名称不是唯一的,但假设你使用任意的数据例如:

select p.firstname, p.postcode, sum(i.earned) earnings from people p 
inner join invoices i on p.firstname = i.person 
group by i.person 

| *firstname* | *postcode* | *earnings* | 
+-------------+------------+------------+ 
| Alex  | 2403  | 16090 | 
| Michael  | 3456  | 10000 | 
| Peter  | 2357  | 1000  | 

也许不是最可敬的资源,但这种联系应该帮助了解更多关于使用GROUP BYSUM

https://www.w3resource.com/sql/aggregate-functions/sum-with-group-by.php

+1

请注意,只有在两个表都有条目的情况下,“inner join”才会返回行。 如果您想象第三个人'朱莉'出现在“人”中,但没有赚取任何收入,她就不会出现在“内部联合”中。如果你想返回所有'people',然后添加任何收入,包括任何在'invoices'中没有条目的'people'的空值,你可以将它改为'left join'。 –

1

由于我无法弄清楚你的表是什么样的,我认为这段代码会有帮助。

SELECT 
    a.firstname, 
    a.postcode, 
    SUM(b.earned) 
FROM 
    People a 
LEFT OUTER JOIN 
    Invoices b 
ON 
    a.firstname = b.person 
GROUP BY 
    a.firstname 

如果你可以添加更多关于你的表格的细节,那会很棒。

-2
SELECT 
    firstname, 
    count(earned) AS earnings 
FROM People 
INNER JOIN Invoices 
     ON People.firstname = Invoices.person 
GROUP BY person 
+0

这只会计算'发票'中有多少条目 - 而不是总收入。您需要使用'sum'而不是'count' –

0
select p.firstname,sum(p.income)+sum(i.earned) from people p inner join 
invoice i on p.firstname = i.firstname where p.firstname = 
'Alex' group by p.firstname; 

此查询必须解决您的问题

0

对不起,SUM应该的。

SELECT 
    firstname, 
    SUM(earned) AS earnings 
FROM People 
INNER JOIN Invoices 
    ON People.firstname = Invoices.person 
GROUP BY person 
+0

不要开始制作新的答案。只需更新您的旧答案 – Gagantous