【问题标题】:Summarize values even they not exist in second table汇总值,即使它们不存在于第二个表中
【发布时间】:2016-01-21 10:37:01
【问题描述】:

我有两张桌子。第一个包含产品代码,第二个包含产品代码和数量。

现在我想总结每个产品代码的所有数量,即使第二个表中没有所有产品。 输出应该是产品代码和每个代码的总数量,对于他们没有数量的代码,它是0。

**表格1** 产品名称 | -------------- 一个 | 乙 | c | d | 电子| **表2** 产品名称 |数量 | ---------------------- 一个 | 3 | 乙 | 4 | 一个 | 1 | 乙 | 2 | c | 1 | **输出** 产品名称 |数量 | ---------------------- 一个 | 4 | 乙 | 6 | c | 1 | d | | 电子| |
SELECT tbl1.productname, SUM(tbl2.qty) AS TotQTY
FROM tbl1
INNER JOIN tbl2 ON tbl1.productname = tbl2.productname
group by tbl1.productname

这是我在SQL Fiddle的尝试

只能获取有数量的记录,其他的不显示。

【问题讨论】:

  • Sqlfiddle 对我不起作用(只是挂起),但听起来你需要一个 LEFT OUTER JOIN
  • 我不知道今天 sqlfiddle 出了什么问题。使用 LEFT OUTER JOIN 它只返回没有数量的记录。
  • 啊,SQLfiddle 醒了。在 SQLfiddle 中,您省略了 GROUP BY 子句。您还检查了 WHERE Table2.productName IS NULL ,这将排除在 table2 上有 qty 的任何行。
  • 如果没有 GROUP BY,我会得到所有代码的总和,而不是每个代码,我不想排除没有数量的行。
  • 是的,您需要 GROUP BY 子句。在 SQLfiddle 中,您忽略了它,这就是它总结所有代码的原因。您在那里使用的 WHERE 子句不包括具有数量的行

标签: mysql join sum


【解决方案1】:
SELECT Table1.productName,COALESCE(SUM(Table2.qty),0) AS TotQTY
FROM Table1
LEFT JOIN Table2 ON Table1.productName = Table2.productName
group by Table1.productName

【讨论】:

    【解决方案2】:
        SELECT Table1.productName, SUM(Table2.qty)  AS TotQTY
    FROM Table1
    LEFT JOIN Table2 ON Table1.productName = Table2.productName
    group by Table1.productName
    

    【讨论】:

    • 这有效,但仅适用于有数量的代码。我想包括所有记录。在我的第一篇文章中查看我想要什么样的输出。
    • 显示所有记录。请检查一次。
    【解决方案3】:

    这似乎是你想要的:-

    SELECT Table1.productName, COALESCE(SUM(Table2.qty),0) AS TotQTY
    FROM Table1
    LEFT JOIN Table2 ON Table1.productName = Table2.productName
    GROUP BY Table1.productname
    

    SQLfiddle:-

    http://sqlfiddle.com/#!9/619228/3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多