【问题标题】:Mysql calculate multiple SUM() varialbeMysql 计算多个 SUM() 变量
【发布时间】:2020-09-05 12:55:27
【问题描述】:

我想计算 2 sum() 我已经尝试过如下查询,它可以工作但速度很慢。有什么想法可以让它变得更好吗?

SELECT customer, 
       SUM(CASE WHEN book_day BETWEEN '2020-01-01' AND '2020-01-31'  
                THEN pax+free 
                ELSE 0 
                END) AS January,
       SUM(CASE WHEN book_day BETWEEN '2020-02-01' AND '2020-02-31'  
                THEN pax+free 
                ELSE 0 
                END) AS February,
       ( SUM(CASE WHEN book_day BETWEEN '2020-01-01' AND '2020-01-31'  
                  THEN pax+free 
                  ELSE 0 
                  END) + 
         SUM(CASE WHEN book_day BETWEEN '2020-02-01' AND '2020-02-31'  
                  THEN pax+free 
                  ELSE 0 
                  END) ) AS total
 FROM rezervations  

我怎样才能让January + February as total这样更简单

【问题讨论】:

  • '2020-02-31' 匹配无效日期。顺便说一句,book_day 列上是否有索引..?
  • 它只是看起来是否存在一天,不管我寄给他什么。只关注查询:)
  • 好吧,那就使用SUM(CASE WHEN book_day BETWEEN '2020-01-01' AND '2020-02-29' THEN pax+free ELSE 0 END AS total,但不要检查索引是否存在性能问题。
  • @AliGüzel 下面的查询将运行得更快,因为book_day 上有一个索引
  • 不知book_days列的格式是DATE,还是DATE...

标签: mysql sql sum query-performance calculated-columns


【解决方案1】:

BETWEEN '2020-01-01' AND '2020-02-29' 保留在 where 子句中。

确保 book_day 列上有索引

SELECT customer, 
SUM(CASE WHEN book_day BETWEEN '2020-01-01' AND '2020-01-31' THEN pax+free ELSE 0 END) as January,
SUM(CASE WHEN book_day BETWEEN '2020-02-01' AND '2020-02-29'  THEN pax+free ELSE 0 END) as February,
(SUM(CASE WHEN book_day BETWEEN '2020-01-01' AND '2020-02-29'  THEN pax+free ELSE 0 END) ) as total
 FROM rezervations 
WHERE
book_day BETWEEN '2020-01-01' AND '2020-02-29'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多