Sql 为什么Group By在我的查询中没有按预期工作?

Sql 为什么Group By在我的查询中没有按预期工作?,sql,postgresql,group-by,Sql,Postgresql,Group By,我在Postgres数据库中做一个查询,我想按月份获取以下组的总金额。它没有按预期工作。我真的需要帮助。我的问题是 SELECT SUM(pi.total_amount) AS total_amount, status, accounts_approval_date, Cast(substring(accounts_approval_date, 4, 2) AS INTEGER) AS months FROM proforma_invoice AS pi

我在Postgres数据库中做一个查询,我想按月份获取以下组的总金额。它没有按预期工作。我真的需要帮助。我的问题是

SELECT SUM(pi.total_amount) AS total_amount,
       status,
       accounts_approval_date,
       Cast(substring(accounts_approval_date, 4, 2) AS INTEGER) AS months
FROM proforma_invoice AS pi
WHERE pi.status = 'Accounts Approved'
  AND pi.created_by = 18
  AND substring(accounts_approval_date, 7, 4) = '2019'
GROUP BY months,
         pi.status,
         pi.proforma_invoice_id
ORDER BY pi.proforma_invoice_id DESC
这是我根据这个查询的输出


如果希望每月一行,则从
分组依据中删除
形式发票id
,从
选择中删除
账户审批日期中删除

SELECT SUM(pi.total_amount) AS total_amount,
       status,
       Cast(substring(accounts_approval_date, 4, 2) AS INTEGER) AS months
FROM proforma_invoice AS pi
WHERE pi.status = 'Accounts Approved' AND
      pi.created_by = 18 AND
      substring(accounts_approval_date, 7, 4) = '2019'
GROUP BY months, pi.status
ORDER BY months;

如果您想在结果集中显示发票id,可以使用
ARRAY\u AGG()
引入一个列表。

您可以在从选择中删除帐户\u审批\u日期后尝试,因为它不是分组依据条款的一部分。您需要按
pi.形式发票\u id
分组,如果您也按
账户\批准\日期
分组会发生什么?谢谢@mkRabbani。。不知怎么的,它帮助了我。。但是如果是分组,我们需要保持顺序1。从group子句中删除
invoice\u id
。2.您可以使用
date\u part('month',approval\u date)
获取月份,而不是子字符串。3.“保持顺序”是什么意思?你能添加一个示例和预期的输出吗?你已经向我们展示了你得到了什么,但不是你想要得到什么。您按形式发票id分组但不显示该值这一事实肯定无助于澄清问题。