Search code examples
mysqlsqlsumquery-performancecalculated-columns

Mysql calculate multiple SUM() varialbe


I want to calculate 2 sum() i have tried query as below it works but very slowly. Any ideas to make it better?

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  

How can i make simplier like January + February as total


Solution

  • keep BETWEEN '2020-01-01' AND '2020-02-29' in where clause.

    make sure there is index on book_day column

    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'