SQL中的相对比例

时间:2018-11-06 00:30:35

标签: sql

我对查询结果感到困惑,并试图了解它的可能性

我有一张每次摘花的记录表:

WITH unique_picks AS(

SELECT 
date(pick_timestamp_local) as date
,flower_species
FROM all_picks
WHERE country_id = 1

),

proportions AS(
select 
date
, flower_species
, 100. * count(*) / sum(count(*)) over () as prop
from unique_picks
group by 1,2
ORDER BY 1
)

SELECT 
date
,sum(prop) as total_proportions
FROM proportions
GROUP BY date
ORDER BY date

每天总是有不止一个采摘(从来没有0),所以每种花的每天比例总和应该等于1,对吗?考虑到我按日期分组,他们怎么可能不这样做?

但是,结果数据集如下所示:

  date       total_proportions
1 2018-07-16             0.286
2 2018-07-17             0.646
3 2018-07-18             0.591
4 2018-07-19             0.656
5 2018-07-20             0.635
6 2018-07-21             0.699

鉴于上述查询,这怎么可能?我在做什么错?

1 个答案:

答案 0 :(得分:1)

这是推测,但我认为您没有显示完整的数据集。

如果您运行:

select sum(prop)
from proportions

那么您应该得到100左右。因为您将比例乘以100。

该总和为100,无论分配多少天。您的第一行是说0.286%的花朵是在2018-07-16采摘的,依此类推。我只是认为结果集缺少一排会导致总和为100的行。