Si我是acesss和SQL的新手。 我有我的小数据库(商店系统) 我正在尝试进行一个非常简单的查询,其中打印出用户名和他们花费的总和。
SELECT kl.name, kl.sname, Sum((SELECT onl_Sum FROM online_payment)) AS overall
FROM users AS kl, orders AS pas, payments AS maks
WHERE (((kl.Klnum)=[pas].[Klnum]) AND ((pas.Pasnum)=[maks].[Pasnum]) AND ((maks.paynum)=(SELECT paynum FROM online_payment)))
GROUP BY kl.name, kl.name;
我稍微更改了名字,以便更容易理解。
如果每个用户只有一次付款,问题就是有效,但当用户付款多次时,就会出错。
关系是这样的: 用户 - >订单 - >付款 - > Online_payment - > Not_online 用户可以有多个订单,但每个订单可以有一个或多个付款(问题),每个付款只有一个online_payment / Not_online付款
我认为我确实搞砸了这里的关系,但我不确定。
有更多的表和关系,但它们没有任何问题......
答案 0 :(得分:0)
SELECT kl.name, kl.sname, Sum(online.onl_Sum) AS overall
FROM users AS kl JOIN orders AS pas ON pas.Klnum = kl.Klnum
JOIN payments AS maks ON pas.Pasnum=maks.Pasnum
LEFT JOIN online_payment online ON maks.paynum = online.paynum
GROUP BY kl.name, kl.name;
答案 1 :(得分:0)
您最好使用加入加入您的在线支付和用户表格,这是我从预订系统数据库快速汇总的一个示例。您希望按用户表主键分组,否则具有相同名称的人将组合在一起
SELECT u.Firstname,u.Lastname, sum(i.Total) as total from User as u
Join Invoice as i on u.id = i.UserId
group by u.Firstname,u.Lastname,u.id