Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:使用分区作为求和的条件_Sql_Postgresql - Fatal编程技术网

SQL:使用分区作为求和的条件

SQL:使用分区作为求和的条件,sql,postgresql,Sql,Postgresql,我有一个简单的问题: SELECT price_band ,device ,SUM(requests) as requests From database.price_band_stats WHERE day = '2016-10-31' AND product_id = 6584 and device IN ('Desktop', 'Android') GROUP BY price_band ,device 返回的表如下

我有一个简单的问题:

SELECT
    price_band
    ,device
    ,SUM(requests) as requests
From database.price_band_stats
WHERE
    day = '2016-10-31'
    AND product_id = 6584
    and device IN ('Desktop', 'Android')    
GROUP BY
    price_band
    ,device
返回的表如下所示:

|price_band | device  | requests
0             Android   149007
0.01          Android   466467
0.05          Android   520661
0.1           Android   487273
0             Desktop   319786
0.01          Desktop   1485894
0.05          Desktop   1693395
0.1           Desktop   1547485
我想调整我的代码以添加一个额外的列。新列将以大于或等于给定设备的价格区间对所有请求求和。例如,如果我们在Android上取0.05的价格带,我想要所有请求到Android的价格带为0.05或更高(即0.05和0.1)的总和

因此,该表将如下所示:

price_band      device     requests    request_above_price_band
0               Android    149007      1623408
0.01            Android    466467      1474401
0.05            Android    520661      1007934
0.1             Android    487273      487273
0               Desktop    319786      5046560
0.01            Desktop    1485894     4726774
0.05            Desktop    1693395     3240880
0.1             Desktop    1547485     1547485
你应使用:

您应该使用:


我不完全理解,但有一个建议是创建两个临时表。第一个将保存现有请求的结果,第二个将保存结果以及要添加的额外列。然后,您可以将两个临时表进行内部联接。这一位:“价格区间大于或等于所讨论的价格区间。”尤其是curvyHi。我认为结果表可能有助于澄清这一点。如果我们以Android上的价格带0.05为例,我想要的是价格带为0.05或更高(即0.05和0.1)的所有请求的总和。我不完全理解,但有一个建议是创建两个临时表。第一个将保存现有请求的结果,第二个将保存结果以及要添加的额外列。然后,您可以将两个临时表进行内部联接。这一位:“价格区间大于或等于所讨论的价格区间。”尤其是curvyHi。我认为结果表可能有助于澄清这一点。如果我们以Android上的价格带0.05为例,我想要的是价格带为0.05或更高(即0.05和0.1)的所有请求的总和。嗨。这几乎奏效了。。。在创建T的WITH部分中,我们还需要在Group By中使用“设备”。一旦我把它完美地投入使用!你能加上这个零钱吗?我会把它标为正确答案。谢谢你好这几乎奏效了。。。在创建T的WITH部分中,我们还需要在Group By中使用“设备”。一旦我把它完美地投入使用!你能加上这个零钱吗?我会把它标为正确答案。谢谢
WITH T AS
( SELECT
    price_band
    ,device
    ,SUM(requests) as requests
 From database.price_band_stats
 WHERE
    day = '2016-10-31'
    AND product_id = 6584
    and device IN ('Desktop', 'Android')    
 GROUP BY
    price_band,device
)
SELECT
 price_band, 
 device, 
 requests,
 SUM(requests) OVER (PARTITION BY device  ORDER BY price_band DESC) 
    as request_above_price_band 
 FROM T
ORDER BY device,price_band