如何从其他地方选择具有不同 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 语句的东西的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis 如何配置动态的 sql 语句

如何使用具有不同 where 条件的多项选择获得结果

使用JPA在Sql中具有不同值的多个语句where子句

如何获得具有指定 where 条件的所有多对一行?

具有基于集合的操作的复杂 SQL 排除逻辑

从表中选择 WHERE 子句中具有不同 IN 列表的表