2017-11-11 117 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

如果此解决方案解决了您的问题,请选择被接受的解决方案。再见。 :-) –