Sql 为什么这段代码不返回正确的结果?

Sql 为什么这段代码不返回正确的结果?,sql,postgresql,group-by,Sql,Postgresql,Group By,目标是返回所有发票的total_左=0的所有命题 例如: Table Propositions Table Invoices (proposition_id, total_left) 在这个例子中,命题2应该被返回,而不是1 下面是实际的SQL Proposition 1: Invoice 1, total_left: 0 Invoice 2, total_left: 10 Proposition 2: Invoice 3, total_left: 0 Invoice 4, tota

目标是返回所有发票的total_左=0的所有命题

例如:

Table Propositions
Table Invoices (proposition_id, total_left)
在这个例子中,命题2应该被返回,而不是1

下面是实际的SQL

Proposition 1:
 Invoice 1, total_left: 0
 Invoice 2, total_left: 10

Proposition 2:
 Invoice 3, total_left: 0
 Invoice 4, total_left: 0
但它不起作用,它仍然返回发票剩余总额>0的命题ID。

您必须删除发票。剩余总额由以下人员从组中删除:

通过使用发票,您可以访问多个组。您也无法获得每个propositions.id的预期总和,因为您有多个记录具有相同的propositions.id,但发票不同。还剩下total_

由于您想知道每个propositions.id的invoices.total_left之和,您只需按propositions.id列进行分组。

您必须通过以下方式从组中删除invoices.total_left:

通过使用发票,您可以访问多个组。您也无法获得每个propositions.id的预期总和,因为您有多个记录具有相同的propositions.id,但发票不同。还剩下total_


因为您想知道每个propositions.id的invoices.total\u的总和,所以您只需要按propositions.id列进行分组。

对于您想做的事情,几乎肯定不需要联接:

SELECT
  propositions.id
FROM
  propositions
  INNER JOIN invoices ON invoices.proposition_id = propositions.id
GROUP BY
  propositions.id
HAVING
  SUM(invoices.total_left) = 0.0

仅当发票中的命题id值不在命题中时,才需要联接。在格式良好的数据模型中,这似乎是不太可能的。

对于您想要做的事情,连接几乎肯定是不必要的:

SELECT
  propositions.id
FROM
  propositions
  INNER JOIN invoices ON invoices.proposition_id = propositions.id
GROUP BY
  propositions.id
HAVING
  SUM(invoices.total_left) = 0.0

仅当发票中的命题id值不在命题中时,才需要联接。在一个结构良好的数据模型中,这似乎是不太可能的。

Is看起来好像在工作,我会测试更多的示例,但你能解释为什么吗?Is看起来好像在工作,我会测试更多的示例,但你能解释为什么吗?你通常按照选择的相同列进行分组,除了那些作为设置函数的参数的列之外。通常,除了那些作为设置函数的参数的列之外,您按所选的相同列进行分组。
SELECT i.proposition_id
FROM invoices i
GROUP BY i.proposition_id
HAVING SUM(i.total_left) = 0.0;