微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 用于获取列总和的SQL

我有三张桌子互相连接.

MysqL> select * from tablea;
+----+--------+
| id | name   |
+----+--------+
|  1 | Item 1 |
|  2 | Item 2 |
+----+--------+
2 rows in set (0.00 sec)

MysqL> select * from tableb;
+----+------+----------+
| id | Aid  | name     |
+----+------+----------+
|  1 |    1 | B Item 1 |
|  2 |    2 | B Item 2 |
|  3 |    1 | B Item 3 |
+----+------+----------+
3 rows in set (0.00 sec)

MysqL> select * from tablec;
+----+------+----------+-------+
| id | Bid  | name     | value |
+----+------+----------+-------+
|  1 |    1 | C Item 1 |    10 |
|  2 |    2 | C Item 2 |    20 |
|  3 |    1 | C Item 3 |    15 |
|  4 |    2 | C Item 4 |     5 |
|  5 |    3 | C Item 5 |    12 |
+----+------+----------+-------+
5 rows in set (0.00 sec)

TableA与TableB与Aid链接,TableC与TableB与Bid链接.

我想要的是tableA的id和所有TableC项的值的总和.

我希望上面例子的结果集是

+-----------+--------+
| tablea.id | sum    |
+-----------+--------+
|         1 |     37 |
|         2 |     25 |
+-----------+--------+

解决方法:

SELECT  a.ID, SUM(c.value) totalValue
FROM    tablea a
        INNER JOIN tableb b
            On a.ID = b.AID
        INNER JOIN tablec c
            ON b.ID = c.BID
GROUP BY a.ID

如果有可能其他表中不存在来自tableA的ID,并且您还想显示其结果,请改用LEFT JOIN

SELECT  a.ID, COALESCE(SUM(c.value), 0) totalValue
FROM    tablea a
        LEFT JOIN tableb b
            On a.ID = b.AID
        LEFT JOIN tablec c
            ON b.ID = c.BID
GROUP BY a.ID

> SQLFiddle Demo for both queries

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐