gpt4 book ai didi

sql - 根据条件使用不同的字段

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

我记录了我的太阳能电池板每天产生的能量。现在我想创建一个 SQL 语句来获取每个月产生的能量总和,但每年单独列。

我想出了以下 SQL 语句:

SELECT LPAD(extract (month from inverterlogs_summary_daily.bucket)::text, 2, '0') as month,
sum(inverterlogs_summary_daily."EnergyProduced") as a2022
from inverterlogs_summary_daily
WHERE
inverterlogs_summary_daily.bucket >= '01.01.2022' and inverterlogs_summary_daily.bucket < '01.01.2023'
group by month
order by 1;

这导致仅获取 2022 年的值:

<表类="s-表"><头><日>月 a2022<正文>110023583495

如何更改 SQL 语句以获取每年的新列?这可能吗?

结果应该是这样的(每年都有一个新列,如果我每年都必须更新 SQL 语句也不会介意):

<表类="s-表"><头><日>月 a2022a2023<正文>11009223584973495508

最佳答案

您可以使用条件聚合:

select extract(month from bucket) bucket_month,
sum("EnergyProduced") filter(where extract(year from bucket) = 2022) a_2022,
sum("EnergyProduced") filter(where extract(year from bucket) = 2021) a_2021
from inverterlogs_summary_daily
where bucket >= date '2021-01-01' and bucket < date '2023-01-01'
group by extract(month from bucket)
order by bucket_month

我假设 bucket 是类似时间戳的数据类型,并相应地调整了日期算法。

旁注:filter 子句中的表达式可能可以用更长的来优化:

sum("EnergyProduced") filter(
where bucket >= date '2022-01-01' and bucket < date '2023-01-01'
) a_2022,

关于sql - 根据条件使用不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74322020/

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