mysql - SQL select sum 与来自不同表的多个where

标签 mysql sql

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

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

我需要的是从这两个表中进行选择,其中我将获得每个用户购买的每件商品的总和。

我已经尝试过使用表“users”:

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

最佳答案

原始答案

首先,你提交的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部分,为了我自己的利益,我在我的 fiddle 上添加了ORDER BY,如果您愿意,可以使用它,或不。

这是我在发布示例数据之前为您准备的 fiddle ,我看到的其他人已经给出了主要答案,所以我只是发布它,因为我已经完成了它的工作。 http://sqlfiddle.com/#!9/8fa2d/6/0

答案2.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

关于mysql - SQL select sum 与来自不同表的多个where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783346/

相关文章:

sql - SQL 中的杂项星形查找字符

sql - 将多个列值插入单个插入值?

MYSQL - 索引和优化选择查询

mysql - 先获取最后一条记录,其余按升序排列

MySQL 数据库 - 将数据存储在一个表中或使用查找

mysql - 如何知道在存储过程中插入查询是否成功?

java - 如何从结果集中检索 SQL COUNT 函数的结果?

c# - 可以通过存储过程创建 View 吗?

php - 根据选择更新表,可能使用锁定?

php - 正确列出网站文章