2017-10-05 58 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