我在postgresql中计算一个百分比,当将一个数字除以同一个数字时,会出现以下意外行为

我在postgresql中计算一个百分比,当将一个数字除以同一个数字时,会出现以下意外行为,postgresql,division,Postgresql,Division,我是postgresql的新手,很难理解为什么我会得到我看到的结果 我执行以下查询 SELECT name AS region_name, COUNT(tripsq1.id) AS trips, COUNT(DISTINCT user_id) AS unique_users, COUNT(case when consumed_at = start_at then tripsq1.id end) AS first_day, (SUM(case when consumed_at = start_a

我是postgresql的新手,很难理解为什么我会得到我看到的结果

我执行以下查询

SELECT
name AS region_name,
COUNT(tripsq1.id) AS trips,
COUNT(DISTINCT user_id) AS unique_users,
COUNT(case when consumed_at = start_at  then tripsq1.id end) AS first_day,
(SUM(case when consumed_at = start_at  then tripsq1.id end)::NUMERIC(6,4))/COUNT(tripsq1.id)::NUMERIC(6,4) AS percent_on_first_day
FROM promotionsq1
INNER JOIN couponsq1
ON promotion_id = promotionsq1.id
INNER JOIN tripsq1
ON couponsq1.id = coupon_id
INNER JOIN regionsq1
ON  regionsq1.id = region_id
WHERE promotion_name = 'TestPromo'
GROUP BY region_name;
并得到以下结果

 region_name    | trips | unique_users | first_day | percent_on_first_day
-------------------+-------+--------------+-----------+-----------------------
 A              |     3 |            2 |         1 |   33.3333333333333333
 B              |     1 |            1 |         0 |
 C              |     1 |            1 |         1 | 2000.0000000000000000
第一行的百分比计算正确,而第三行的百分比是应该的20倍。第一天的百分比应为100.00,因为它是100.0*1/1


如果您能提供任何帮助,我们将不胜感激

我怀疑问题的原因在于以下代码:

SUM(case when consumed_at = start_at  then tripsq1.id end)
这告诉我你在对ID求和,这是没有意义的。您可能想要:

SUM(case when consumed_at = start_at  then 1 end)

删除
分组依据
+所有聚合函数,首先确保您选择了您期望的结果(显然您在某处有一个笛卡尔积)正确的结果是什么?你能把它加到问题里吗?您还可以添加“(SUM(case when consumered_at=start_at then tripsq1.id end)::NUMERIC(6,4))”SUM_FIRST_DAY作为新列,然后发布新输出。请您向我解释一下“then 1 end”部分,好吗?这意味着每次consumered_at=start_at时,在总和中添加1