Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取引用表的总数';柱_Mysql_Sql_Join_Sum - Fatal编程技术网

Mysql 获取引用表的总数';柱

Mysql 获取引用表的总数';柱,mysql,sql,join,sum,Mysql,Sql,Join,Sum,考虑账户和存款数据库: CREATE TABLE accounts ( id int not null primary key, name varchar(63) ); CREATE TABLE deposits ( id int not null primary key, account int references accounts(id), dollars decimal(15, 2), status enum('pending','com

考虑账户和存款数据库:

CREATE TABLE accounts (
    id int not null primary key,
    name varchar(63)
);

CREATE TABLE deposits (
    id int not null primary key,
    account int references accounts(id),
    dollars decimal(15, 2),
    status enum('pending','complete') 
);


insert into accounts values
(0, 'us'),
(1, 'europe'),
(2, 'asia');

insert into deposits values
(0, 0, 10, 'pending'),
(1, 0, 20, 'complete'),
(2, 1, 100, 'complete'),
(3, 1, 200, 'pending'),
(4, 1, 300, 'complete'),
(5, 2, 1000, 'pending');
我想获得每家银行全部
完整的
存款的总数,这是预期结果:

+--------+-----+
| us     | 20  |
| europe | 400 |
| asia   | 0   |
+--------+-----+
这是我尝试过的SQL,但它没有按预期工作:

SELECT
    a.name, SUM(d.dollars)
FROM
    accounts a
  INNER JOIN
    deposits d ON (a.id = d.account AND d.status='complete');
这是它给出的结果:

+--------+-----+
| us     | 420 |
+--------+-----+
当前代码的

我做错了什么,我怎样才能得到预期的总数?

试试这个

 SELECT
a.name, coalesce(SUM(d.dollars),0) as sums
FROM
accounts a
left JOIN
deposits d ON (a.id = d.account AND d.status='complete')
group by  a.name
order by sums desc
您应该使用LEFT JOIN,还应该使用groupby

试试这个

 SELECT
a.name, coalesce(SUM(d.dollars),0) as sums
FROM
accounts a
left JOIN
deposits d ON (a.id = d.account AND d.status='complete')
group by  a.name
order by sums desc
您应该使用LEFT JOIN,还应该使用groupby


您应该使用按
a.name
(甚至可能是
a.id
)和
左外部联接进行分组(如果您想获得非当前值)

编辑:


您应该使用按
a.name
(或者甚至可能是
a.id
)和
左外部联接进行分组(如果您想获得非当前值)

编辑:

请尝试以下查询:

SELECT
a.name, IF(SUM(d.dollars) IS NULL, 0, SUM(d.dollars) )
FROM
    accounts a
  LEFT JOIN
    deposits d ON (a.id = d.account AND d.status='complete')
GROUP BY a.name ORDER BY a.id;
请尝试以下查询:

SELECT
a.name, IF(SUM(d.dollars) IS NULL, 0, SUM(d.dollars) )
FROM
    accounts a
  LEFT JOIN
    deposits d ON (a.id = d.account AND d.status='complete')
GROUP BY a.name ORDER BY a.id;

通过将账户与存款合并,您只需确保与账户关联的存款的金额为美元。如果您还想按帐户名称,甚至帐户Id进行分组,那么您将获得一笔金额/银行。

通过将帐户与存款合并,您只需确保为链接到帐户的存款合计美元。如果您还想按帐户名甚至帐户Id分组,那么您将得到一笔金额/银行。

您忘记了按银行分组您忘记了按银行分组