【问题标题】:Join tables and accumulate values连接表并累积值
【发布时间】:2022-06-10 20:04:17
【问题描述】:

我是 SQL 菜鸟。

表 A 包含有关我的项目的信息。在这里,我们有一个“ExpectedValue_amount”字段 - 含义。我们期望在这个项目上赚取多少/开具发票。

表 B 包含我们的实际发票。一个项目可以有多个发票。所以我想累计某个项目的所有值,看看“ExpectedValue”和“Actual invoice value”的区别。

我对表 A 的查询:

SELECT
  name,
  number,
  customer_name,
  expectedValue_amount,
FROM
  Projects

Table B 我有 projectnumber which == Table A 中的数字。但我想查看一个项目的总数。

SELECT
  projects_number,
  totalExcludingTax_amount
FROM
    Invoices

期望的输出:

【问题讨论】:

  • 到目前为止你尝试过什么?使用 JOIN 组合表,使用 SUM 求和,使用 GROUP BY 按项目分组。

标签: sql google-bigquery


【解决方案1】:

也许尝试在加入表格时弄乱一点,但这样的事情可能对你有用

SELECT
  p.name,
  p.number,
  p.customer_name,
  p.expectedValue_amount,
  SUM(i.totalExcludingTax_amount)
FROM
  Projects p JOIN Invoices i ON i.projects_number = p.number
GROUP BY p.number

【讨论】:

  • 谢谢!现在唯一的问题是 number 是 INT 而 projects_number 是 STRING。
  • 但为什么它们不是同一类型?如果它们相关,则发票表中的项目编号应该有限制,并且您不能使用不同的数据类型进行限制
【解决方案2】:
SELECT
  p.name,
  p.number,
  p.customer_name,
  p.expectedValue_amount,
  SUM(i.totalExcludingTax_amount) as totalExcludingTax_amount
FROM
  Projects p 
JOIN Invoices i 
ON CAST(p.number as STRING) = i.projects_number
GROUP BY 1,2,3,4

【讨论】:

  • 谢谢。 “对于参数类型的运算符 = 没有匹配的签名:INT64、STRING。支持的签名:ANY = ANY at [8:119]”。可能有问题,因为 number 是 INT 而 projects_number 是 String?
  • 我更改了解决方案以考虑列类型的差异。
  • 如果它解决了您的问题,请接受答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 2022-11-02
  • 2016-07-11
相关资源
最近更新 更多