SQL选择与多个来自不同表的总和

时间:2016-08-05 07:16:00

标签: mysql sql

所以我的MySQL,用户和购买都有两个表。

用户表包含Id,Name,Surname等。购买表包含Id,User_id,Status和Sumes for something。

我需要的是从这两个表中选择,我将得到每个用户购买的每个项目的总和。

我已经用表'用户'

尝试了这个
LEFT JOIN 'purchases'
ON 'users'.'id' = 'purchases'.'user_id'
SELECT SUM (sum) FROM 'users', 'purchases' WHERE 'purchases'.'status' = 'completed' AND 'purchases'.'user_id' = 'users'.'id'

但是有了这个,我得到了每个用户相同的金额,这是错误的。我该怎么写呢?

非常感谢任何可能的帮助!

为了提供一些实际的例子,我们来看看这个:

Users:
Id: 1 Name: John
Id: 2 Name: Ann
Purchases:
Id: 10 Status: completed User_id: 1 Sum: 4.00
Id: 20 Status: completed User_id: 1 Sum: 8.00
Id: 30 Status: completed User_id: 2 Sum: 50.00
Id: 40 Status: completed User_id: 2 Sum: 100.00

运行查询后,我应该得到这个:

 Id: 1 Sum: 12.00 
 Id: 2 Sum: 150.00

查询是通过Laravel进行的,所以我只是

DB::table('users')->leftJoin... ->select(DB::raw...

4 个答案:

答案 0 :(得分:1)

原始答案

首先,你提交的SQL是乱七八糟的,事情完全超出传统的顺序,我不确定它会如所呈现的那样执行。也就是说,这应该做你想要的,假设我正确理解你想要的输出:

SELECT users.id, users.name, users.surname, ROUND(SUM(purchases.sum),2) AS totalSum
FROM purchases
    LEFT JOIN users ON users.id = purchases.user_id
WHERE status='completed'
GROUP BY users.name, users.surname
ORDER BY users.id

您在查询中缺少的关键方面是GROUP BY部分,我为了自己的利益而添加了ORDER BY,如果您愿意,可以使用它。

这是我在发布您的样本数据之前为您准备的小提琴,主要答案已经由我看到的其他人给出,因此我只是发布了这个,因为我已经完成了它的工作。 http://sqlfiddle.com/#!9/8fa2d/6/0

回答2.0

小提琴正在表演,所以这是未经测试但试一试。

SELECT users.id, users.name, users.surname, ROUND(SUM(CASE WHEN purchases.status = 'completed' THEN purchases.sum ELSE 0 END),2) AS totalSum 
FROM users 
    LEFT JOIN purchases ON users.id = purchases.user_id 
GROUP BY users.id
ORDER BY users.id

答案 1 :(得分:0)

您需要按照您希望aggretates所基于的字段进行分组。 我不知道你的桌子结构,但是应该这样做。

SELECT 
  U.UserId, U.UserName, Sum(P.AmountPaid)
FROM Users U
LEFT OUTER JOIN Purchases P ON P.UserId = U.UserId AND P.Status = 'completed'
GROUP BY
 U.UserId, U.UserName

答案 2 :(得分:0)

尝试此查询:

SELECT 
  U.UserId, Sum(P.AmountPaid)
FROM Users U
LEFT OUTER JOIN Purchases P ON P.UserId = U.UserId 
GROUP BY
 U.UserId

答案 3 :(得分:-1)

jq(".cell img").each(function() {
    if (jq(this).length > 0) {
        console.log("Oh There You Are");
    } else { 
        console.log("Empty elements erased");
        jq( ".cell" ).remove();
    }
});

您已设置数据库知道的SELECT columns, SUM(column to sum) FROM (tables you want) WHERE FILTER GROUP BY column (for example customer ID) ,哪些内容必须汇总。