当前位置: 首页 > 知识库问答 >
问题:

SQL从不同的表中选择具有多个位置的总和

陶胤运
2023-03-14

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

用户表包含id、Name、Surname等。购买表包含ID、User_id、状态和支付的金额。

我需要的是从这两个表中进行选择,在这两个表中,我将有每个用户购买的每件物品的总和。

我在“用户”表中尝试过:

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...

共有3个答案

彭洲
2023-03-14

尝试此查询:

SELECT 
  U.UserId, Sum(P.AmountPaid)
FROM Users U
LEFT OUTER JOIN Purchases P ON P.UserId = U.UserId 
GROUP BY
 U.UserId
朱季
2023-03-14

您需要根据聚合要基于的字段进行分组。我不知道你的桌子结构,但像这样的东西应该可以。

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
钦英发
2023-03-14

首先,你提交的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

您在查询中缺少的关键方面是分组依据部分,为了我自己的利益,我在小提琴上添加了订单依据,如果您愿意或不愿意,请使用它。

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

Fiddle出现了问题,所以这是未经测试的,但请尝试一下。

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
 类似资料:
  • 问题内容: 所以这是我的设置,我有2个具有以下(简化)模式的旧表和新表 我正在寻找一种SQL查询,该查询返回以下内容,但在1个查询中包含4列,而不是每个2列包含2个查询 因此,我理想的结果集将包含4列: 谢谢! 问题答案: 您是否尝试过JOIN语句:

  • 问题内容: 有这张桌子 和这个 我如何从表“项目”中选择所有行并显示字段“已删除”,即使在给定用户ID的情况下,即使“ MyList”中不存在itemID? 查询结果示例: 什么是查询,以便我可以得到该结果? 谢谢 问题答案: 我不确定这是否是最好的方法,但它会返回我一直在寻找的内容:

  • 问题内容: 我需要从3个表中获得不同的值。 当我执行此代码时: 我收到一条错误消息,提示我的“城市”一栏不明确。 我也尝试过这个: 有了这段代码,我的表什么都收不到。 让我向您展示我正在尝试做的事的示例: 我需要得到这样的结果 城市的顺序对我来说并不重要,我只需要拥有所有城市,每个城市应该只有一个代表。 任何的想法?我当时想在中使用,但没有连接,所以我不能使用它。 问题答案: 该关键字将返回结果列

  • 问题内容: 假设我有一张桌子: 这将返回自特定日期以来销售数量的产品清单。有没有一种方法不仅可以选择这个和,而且还可以选择没有where条件的和?我想查看每种产品自特定日期以来的销售情况以及所有(没有日期限制)的销售情况。 问题答案:

  • 问题内容: 我想知道如何从具有类型列的表中进行选择语句?该列的类型定义为: UPD1 表定义为 如果我选择此列, 我将得到以下无意义的结果: 我只想打开这种类型。 问题答案: 像这样尝试: 这是一个sqlfiddle演示

  • 问题内容: 有没有一种方法可以针对具有指向ArrayList或List的where子句的数据源(可以是sql,oracle或access)创建查询? 例子: 我已经看到了使用Linq的一些方法,但是如果可以避免的话,我宁愿不诉诸于此。 问题答案: 您可以使用。尝试这样的事情: 附带说明,这不能保护您免受SQL注入的侵害-希望本示例将为您指明正确的方向。