gpt4 book ai didi

sql - 行数据之间的划分 - SQL

转载 作者:行者123 更新时间:2023-12-05 09:17:24 24 4
gpt4 key购买 nike

我表中的数据如下所示:

date, app, country, sales
2017-01-01,XYZ,US,10000
2017-01-01,XYZ,GB,2000
2017-01-02,XYZ,US,30000
2017-01-02,XYZ,GB,1000

我需要每天为每个应用找到美国销售额与英国销售额的比率,因此理想情况下结果应如下所示:

date, app, ratio
2017-01-01,XYZ,10000/2000 = 5
2017-01-02,XYZ,30000/1000 = 30

我目前正在将所有内容转储到 csv 中并在 Python 中离线进行计算,但我想将所有内容移至 SQL 端。一种选择是将每个国家聚合到一个子查询中,加入然后划分,例如

select d1_us.date, d1_us.app, d1_us.sales / d1_gb.sales from
(select date, app, sales from table where date between '2017-01-01' and '2017-01-10' and country = 'US') as d1_us
join
(select date, app, sales from table where date between '2017-01-01' and '2017-01-10' and country = 'GB') as d1_gb
on d1_us.app = d1_gb.app and d1_us.date = d1_gb.date

有没有更简单的方法来做这件事?

最佳答案

您可以在查询中使用 SUM(CASE WHEN) 和 GROUP BY 的比率来执行此操作,而无需子查询。

SELECT DATE, 
APP,
SUM(CASE WHEN COUNTRY = 'US' THEN SALES ELSE 0 END) /
SUM(CASE WHEN COUNTRY = 'GB' THEN SALES END) AS RATIO
FROM TABLE1
GROUP BY DATE, APP;

根据 GB 销售额为零的可能性,您可以调整 GB 的 ELSE 条件,可能是 ELSE 1,以避免除以零错误。这实际上取决于您希望如何处理异常。

关于sql - 行数据之间的划分 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com