2017-11-11 196 views
0

我有以下我的數據庫表的總和:如何計算關聯到不同用戶的銷售

Sales 
    ------------------------- 
    id client account sale 
    1 X  A2  400 
    2 X  A2  300 
    3 X  A1  100 
    4 X  A1  200 

    Account       Users 
    --------------------   ------------------------------------- 
    accountid account    id  username first_name last_name 
    A1   Acc1    U1  abc  Manish  Goyal 
    A2   Acc2    U2  xyz  Yogita  Sharma 
    A3   Acc3    U3  jkl  Nitish  Malhotra   

    AccountUsers 
    ------------------------ 
    id accountid  user 
    1 A1    U1 
    2 A1    U2 
    3 A1    U3 

我想從被關聯到該帳戶和帳戶訪問銷售表中獲取銷售列的總和由Manish和Yogita用戶提供。

我寫了下面的SQL

SELECT SUM(Sales.sale) as total_sale, Account.account, Sales.client 
FROM sales 
INNER JOIN Account ON Sales.accountid = Account.accountid 
INNER JOIN AccountUsers ON AccountUsers.accountid = Account.accountid 
INNER JOIN Users ON Users.id = AccountUsers.user 
WHERE ((trim(CONCAT(Users.first_name,' ',Users.last_name)) = 'Manish Goyal') OR (trim(CONCAT(Users.first_name,' ',Users.last_name)) = 'yogita sharma')) 

我得到了以下結果:

client account total_sale 
X  Acc1 600 
X  Acc2 1400 

不過,我希望得到以下結果:

Output 
client account total_sale 
X  Acc1 300 
X  Acc2 700 

的事情是,如果一個銷售與兩個賬戶的用戶相關聯,然後根據賬戶返回銷售。 我被困在那裏。 先謝謝了!...

+0

我覺得 '馬尼什戈亞爾' 和 'yogita夏爾馬' 都得到300 total_sale因爲兩者的用途有AccountUsers表相同ACCOUNTID。 –

+0

您需要某個GROUP BY子句 –

+0

我將group by子句添加到sql查詢中,但不起作用 –

回答

1

我想你在你的問題上有一些錯誤。請檢查您提到的下列表格

AccountUsers 
    ------------------------ 
    id accountid  user 
    1 A1    U1 
    2 A1    U2 
    3 A1    U3 

在此所有用戶鏈接到相同的accountid。這是否正確?

我認爲你可以直接查詢輸出並獲得銷售額的總和而不需要額外的努力。


我試圖得到你想要得到的結果。

你可以在下面的小提琴看看答案。這可能不完全正確,因爲你想要的東西。但可能會幫助你得到答案。請通過並驗證。

http://sqlfiddle.com/#!9/38c0f/1


SELECT Account.account,sum(Sales.sale) 
FROM Sales 
inner join Account on Account.accountid=Sales.account 
GROUP BY Sales.account,Account.account; 


SELECT Account.account,sum(Sales.sale) 
FROM Sales 
inner join Account on Account.accountid=Sales.account 
where Sales.account in (
SELECT Sales.account 
FROM sales 
left JOIN Account ON Sales.account = Account.accountid 
left JOIN AccountUsers ON AccountUsers.accountid = Account.accountid 
left JOIN Users ON Users.id = AccountUsers.users 
WHERE (((CONCAT(Users.first_name,' ',Users.last_name)) = 'Manish Goyal') 
     OR ((CONCAT(Users.first_name,' ',Users.last_name)) = 'yogita sharma')) 
     group by Sales.Account 
) 
GROUP BY Sales.account,Account.account; 
+0

Yupps,這是正確的。我需要將這些與帳戶相關聯的銷售總額和帳戶由Manish和Yogita用戶訪問。 –

+0

請轉到此鏈接並檢查。 http://sqlfiddle.com/#!9/38c0f/1 –

+0

如果此解決方案解決了您的問題,請選擇被接受的解決方案。再見。 :-) –