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