【问题标题】:SQL for getting sum of a column用于获取列总和的 SQL
【发布时间】:2012-11-07 08:11:13
【问题描述】:

我有三个相互链接的表。

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 通过 Aid 链接到 TableB,TableC 通过 Bid 链接到 TableB。

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

我对上述示例的期望结果集是

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

【问题讨论】:

  • 你试过加入他们吗?

标签: php mysql sql


【解决方案1】:
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

【讨论】:

    【解决方案2】:
    SELECT a.id, SUM(c.value) sum
    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
    

    SQL Fiddle Demo

    【讨论】:

      【解决方案3】:

      你可以试试这个查询

      SELECT a.id AS A, SUM(c.value) AS SUM 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;
      

      【讨论】:

        猜你喜欢
        • 2017-12-09
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 2015-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多