基于日期的汇总/汇总数据

时间:2015-07-05 14:10:10

标签: sql postgresql

我有下表关于每家商店售罄的商品。

表格列

  1. shop_id:商店的具体ID,
  2. 已售出:购买金额为美元($)
  3. 时间:购买的日期和时间。
  4. 数据

    shop_id sold    time
    1       12.44   23/10/2014 20:20
    1       12.77   24/10/2014 20:18
    1       10.72   24/10/2014 20:18
    1       14.51   24/10/2014 20:18
    2       5.94    22/10/2014 20:11
    2       15.69   23/10/2014 20:23
    2       8.55    24/10/2014 20:12
    2       6.96    24/10/2014 20:18
    3       8.84    22/10/2014 20:21
    3       7.82    22/10/2014 20:21
    3       22.19   23/10/2014 20:23
    3       13.21   23/10/2014 20:23
    4       14.60   23/10/2014 20:20
    4       12.19   23/10/2014 20:23
    4       5.41    24/10/2014 20:18
    4       10.93   24/10/2014 20:19
    5       18.54   22/10/2014 20:21
    5       7.48    22/10/2014 20:21
    5       10.67   24/10/2014 20:18
    5       15.96   24/10/2014 20:18
    

    每次购买我有3个分类器:

    购买分类器

    1. low:0-8 $
    2. 中:8-12 $
    3. 高:12岁以上$
    4. 我想要做的是使用PostgreSQL编写一个查询,该查询将按照每种类型的购买分类器生成每天的总购买量。

      所需的输出

      date        low     medium  high
      22/10/2014  29.10   14.51   12.77
      23/10/2014  0       0       70.06
      24/10/2014  16.34   51.24   41.39
      

      非常感谢你的帮助。我对postgreSQL没有经验。我很容易在R中做到这一点,但是因为将一个巨大的数据库表移动到R非常麻烦,我需要学习一些postgreSQL。

1 个答案:

答案 0 :(得分:3)

我相信你可以使用像这样的条件聚合来做到这一点:

select 
  cast(time as date),
  sum(case when sold > 0 and sold <= 8 then sold else 0 end) as low,
  sum(case when sold > 8 and sold <= 12 then sold else 0 end) as medium,
  sum(case when sold > 12 then sold else 0 end) as high
from your_table
group by cast(time as date);

您可能需要稍微调整一下范围 - 8应该分为低和中等?另外,我不记得cast("time" as date)是否是Postgresql的正确语法 - 我怀疑它可能不是,但只是用正确的函数替换该部分以从datetime / timestamp列获取日期。应该是"time"::date