在一个查询中分别为两个不同的日期生成两个 SUM 值列

Posted

技术标签:

【中文标题】在一个查询中分别为两个不同的日期生成两个 SUM 值列【英文标题】:Generate two SUM value columns for two different dates separately in one query 【发布时间】:2021-12-27 01:01:10 【问题描述】:

我正在尝试合并两个查询

  select s.id , sum(h.val)  as [VAL]
    from identity s inner join price_net h on s.date = h.date and s.num_id = h.num_id and s.rec_type = h.rec_type
    where s.date = '10/25/21'
    and s.rec_type = 'D'
    and s.tier = 'P'
    group by s.

.

select s.id , sum(h.val)  as [VAL]
        from identity s inner join price_net h on s.date = h.date and s.num_id = h.num_id and s.rec_type = h.rec_type
        where s.date = '10/26/21'
        and s.rec_type = 'D'
        and s.tier = 'P'
        group by s.

我想要它,所以有一个表,其中一列用于 s.id,接下来的列是每个日期的 VAL 列。如果某个值在特定日期不适用于给定 s.id,则应显示 NA。

【问题讨论】:

您想获取每天的价格吗?然后报告哪个价格最高或最低? 附带说明:对日期使用字符串文字是个坏主意。一个会话可能能够理解'10/25/21',而另一个会话可能会失败,具体取决于区域设置。最好使用明确的日期文字,例如 date '2021-10-25' 【参考方案1】:

我假设您正在寻找条件聚合(聚合函数内的CASE WHEN)。

select
  i.id,
  sum(case when i.date = date '2021-10-25' then pn.val end) as val_20211025,
  sum(case when i.date = date '2021-10-26' then pn.val end) as val_20211026
from identity i
join price_net pn on pn.date = i.date 
                 and pn.num_id = i.num_id
                 and pn.rec_type = i.rec_type
where i.tier = 'P'
and i.rec_type = 'D'
and i.date in (date '2021-10-25', date '2021-10-26')
group by i.id
order by i.id;

【讨论】:

不知道为什么,但我需要使用“cast”函数而不是“date”函数,但该结构总体上工作,谢谢!! 这很奇怪。 date '2021-10-25' 是标准 SQL 日期文字。 mysql 多年来一直支持这一点。 DATE这里不是函数,而是一个关键字,告诉DBMS后面的字符串代表一个日期。【参考方案2】:

你可以在两个条件下都使用 case

select s.id , sum(CASE WHEN s.date = '10/25/21' THEN h.val eLSE  O END)  as [VAL]
, sum(CASE WHEN s.date = '10/26/21' THEN h.val eLSE  O END)  as [VAL2]
        from identity s inner join price_net h on s.date = h.date and s.num_id = h.num_id and s.rec_type = h.rec_type
        where 
        as.rec_type = 'D'
        and s.tier = 'P'
        group by s.ìd

【讨论】:

以上是关于在一个查询中分别为两个不同的日期生成两个 SUM 值列的主要内容,如果未能解决你的问题,请参考以下文章

对两个不同查询 (SQL) 的结果求和

如何查询两个不同日期的 Google Analytics 条件?

用于组合来自两个表的数据的 SQL 查询

从一个列值上的两个比较列 sum() 聚合返回一个 SQL 表

sql语句查询,根据一个表中一个列,该列在两个不同条件同时满足的查询结果

查询未在MS-Access中使用日期条件