按奇数结果分组

时间:2012-12-19 20:07:37

标签: sql group-by

我正在运行以下查询:

SELECT DISTINCT
  CAST(ar_all_bills.a_unpaid_balance as decimal(5,2)) as "Total Unpaid Balance" 
FROM ar_all_bills WHERE a_ar_customer_cid = 100059

结果是以下2条记录:

49.74
62.41

但是,当我在查询中添加GROUP BY以获取未付余额的SUM时:

SELECT DISTINCT
  SUM(CAST(ar_all_bills.a_unpaid_balance as decimal(5,2))) as "Total Unpaid Balance" 
FROM ar_all_bills  WHERE a_ar_customer_cid = 100059 GROUP BY a_ar_customer_cid

结果是:

461.27

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:7)

第一个查询中的DISTINCT过滤掉第二个查询中SUM中包含的项目。删除DISTINCT,您将看到第一个的总和将等于第二个的总和。

如果您希望SUM与原始内容匹配,请尝试以下操作:

SELECT SUM(DISTINCT CAST(ar_all_bills.a_unpaid_balance as decimal(5,2))) as "Total Unpaid Balance" FROM ar_all_bills  WHERE a_ar_customer_cid = 100059 GROUP BY a_ar_customer_cid

DISTINCT需要位于SUM内,而不是在DISTINCT之外。否则,您将收到SUM SUM,而不是DISTINCTSUM项。

如果您希望DISTINCT包含所有项目(而不仅仅是DISTINCT项目),那么只需完全删除SELECT SUM(CAST(ar_all_bills.a_unpaid_balance as decimal(5,2))) as "Total Unpaid Balance" FROM ar_all_bills WHERE a_ar_customer_cid = 100059 GROUP BY a_ar_customer_cid (与您在特定项目中的第二个查询完全不同)情况,但在所有情况下意义不同):

{{1}}

答案 1 :(得分:1)

尝试在没有DISTINCT的情况下运行第一个查询,然后发布结果。这应该会告诉你什么是错的。