【问题标题】:Get Sum with Join table使用联接表获取总和
【发布时间】:2012-12-19 06:02:12
【问题描述】:

如何通过查询JOIN 表获取SUM 查询,我有两个表,我的表是laporanlaporan_pengeluaran

桌拉波兰

id  name    shell
9   loli    12000
10  ardi    24000
11  dian    5500

表 laporan_pengeluaran

id  laporan_id  harga
1   9           15000
2   9           29000
3   10          7500
4   10          5000
5   11          3000
6   11          3000

我的问题,如何通过连接表获得 SUM,在表 laporan 中按 id/name 分组,所以我想得到如下结果:

id  name    shell   harga
9   loli    12000   44000
10  ardi    24000   12500
11  dian    5500    6000

谢谢。

【问题讨论】:

    标签: mysql select join group-by


    【解决方案1】:

    试试这个:

    SELECT l.id, l.name, l.shell, SUM(lp.harga) harga 
    FROM laporan l 
    LEFT JOIN laporan_pengeluaran lp ON l.id = lp.laporan_id 
    GROUP BY l.id; 
    

    查看SQL FIDDLE DEMO

    输出:

    | ID | NAME | SHELL | HARGA |
    -----------------------------
    |  9 | loli | 12000 | 44000 |
    | 10 | ardi | 24000 | 12500 |
    | 11 | dian |  5500 |  6000 |
    

    【讨论】:

      【解决方案2】:

      您可以将两个表连接起来,然后sum(harga) 得到结果。如果您知道您的laporan_pengeluaran 表中将始终有laporan 值,那么您可以使用INNER JOIN

      select l.id,
        l.name,
        l.shell,
        sum(lp.harga) harga
      from laporan l
      inner join laporan_pengeluaran lp
        on l.id = lp.laporan_id
      group by l.id, l.name, l.shell
      

      SQL Fiddle with Demo

      如果您可能在laporan_pengeluaran 表中缺少laporan 值,请使用LEFT JOIN

      select l.id,
        l.name,
        l.shell,
        sum(lp.harga) harga
      from laporan l
      left join laporan_pengeluaran lp
        on l.id = lp.laporan_id
      group by l.id, l.name, l.shell
      

      SQL Fiddle with Demo

      结果是:

      | ID | NAME | SHELL | HARGA |
      -----------------------------
      |  9 | loli | 12000 | 44000 |
      | 10 | ardi | 24000 | 12500 |
      | 11 | dian |  5500 |  6000 |
      

      【讨论】:

      • 如果不能保证 laporan 中的所有行在 laporan_pengeluaran 中都有相关行,您可能需要考虑 LEFT JOIN
      • 您好 bluefeet 感谢您的回复,您的代码有效,我在您的答案中给出了正确的答案,并带有绿色检查。非常感谢伙计。
      【解决方案3】:

      试试这个查询

      SELECT
          l.id,
          l.name,
          IFNULL(lp.TCount,0) as Total
      FROM laporan as l   
      LEFT JOIN (
                  SELECT 
                      laporan_id,
                      SUM(harga) as TCount
                  FROM    laporan_pengeluaran
                  GROUP BY laporan_id
                  ) as lp ON lp.laporan_id = l.id
      

      【讨论】:

      • 嗨 raheel shan 感谢您的回复,您的代码我尚未尝试,因为我的问题已通过以下答案解决。多谢了。
      【解决方案4】:
      SELECT
        laporan.id AS id,
        laporan.name AS name,
        laporan.shell AS shell,
        IFNULL(SUM(laporan_pengeluaran.harga),0) AS harga
      FROM laporan
      LEFT JOIN laporan_pengeluaran ON laporan.id=laporan_pengeluaran.laporan_id
      

      【讨论】:

      • 您好 Eugen Rieck 感谢您的回复,您的代码我尚未尝试,因为我的问题已通过以下答案解决。多谢了。
      猜你喜欢
      • 2015-07-20
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多