如何从其他地方选择具有不同 WHERE 语句的东西
Posted
技术标签:
【中文标题】如何从其他地方选择具有不同 WHERE 语句的东西【英文标题】:How to SELECT something with different WHERE statement from the others 【发布时间】:2020-02-27 11:01:03 【问题描述】:我想做的是:
我在 SQL 中创建了一个数据透视表,在其中创建了一些包含用户帐户的列、每个日期的总和等。这些列都将具有相同的 WHERE 条件。
但是,我想创建另一个列,其中包含过去 30 天的金额,条件为 WHERE date >= CURRENT_TIMESTAMP -30
。
如何在同一个表中创建具有不同条件的选择?
例如:
我有这个:
我想做一个这样的数据透视表
除了最后一列之外,我已经完成了所有内容 - 它需要将金额与条件 WHERE date >= CURRENT_TIMESTAMP -30
相加。
我的其他列将有条件WHERE date >= '20200201'
我已经将数据透视表中的天数定义为当月的天数,而最后一列需要包含过去 30 天的所有内容,因此不仅限于当月。
如何选择“过去 30 天总计”列有自己的条件,与其他列不同?
【问题讨论】:
你的数据库是什么?能否提供一些示例数据? 还有预期的结果。 minimal reproducible example 对不起,我是新来的。我编辑了帖子以包含我所拥有的以及我的问题是什么。 很好,但仍然缺少数据库。是 Oracle、SQLServer、mysql 还是...? 【参考方案1】:日期函数因数据库而异,但思路如下:
select user,
sum(case when extract(day from date) = 1 then amount end) as day_1,
sum(case when extract(day from date) = 2 then amount end) as day_2,
sum(case when extract(day from date) = 3 then amount end) as day_3,
sum(case when extract(year from date) = extract(year from current_date) and
extract(month from date) = extract(month from current_date)
then amount
end) as month_total,
sum(case when date >= current_date - interval '30 da' then amount end) as last_30_days
from t
group by user;
具体功能取决于您使用的数据库。
【讨论】:
以上是关于如何从其他地方选择具有不同 WHERE 语句的东西的主要内容,如果未能解决你的问题,请参考以下文章