如何在MySQL查询中每周,每月和每年总结金额?

时间:2016-11-22 14:34:58

标签: mysql

我有一张订单表。我希望在单个查询中获得每周,每月和每年的订单价格总和。我怎么能这样做?

如果我将查询分开,这很容易。我的查询是:

SELECT SUM(price) AS weekly_price FROM orders WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK);        
SELECT SUM(price) AS monthly_price FROM orders WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH);
SELECT SUM(price) AS yearly_price FROM orders WHERE date > DATE_SUB(NOW(), INTERVAL 1 YEAR);

请帮助我并写下如何在一个查询中获取weekly_pricemonthly_priceyearly_price的答案?

2 个答案:

答案 0 :(得分:1)

你可以使用subselect的内连接

    select t1.weekly_price, t2.monthly_price, t3.yearly_price
    from (  
          SELECT 1 as key, SUM(price) AS weekly_price 
          FROM orders 
          WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) 
    ) t1 
    inner join (      
        SELECT 1 as key, SUM(price) AS monthly_price 
        FROM orders 
        WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH)
    ) t2 on t1.key = t2.key
    inner join  ( 
        SELECT 1 as key, SUM(price) AS yearly_price 
        FROM orders 
        WHERE date > DATE_SUB(NOW(), INTERVAL 1 YEAR)
    } t3 on t1.key = t3.key 

答案 1 :(得分:0)

您可以在CASE WHEN中执行SUM()。像这样:

SELECT 
    SUM(CASE WHEN orders.date > DATE_SUB(NOW(), INTERVAL 1 WEEK) THEN orders.price ELSE 0 END) AS weekly_price,
    SUM(CASE WHEN orders.date > DATE_SUB(NOW(), INTERVAL 1 MONTH) THEN orders.price ELSE 0 END) AS monthly_price,
    SUM(CASE WHEN orders.date > DATE_SUB(NOW(), INTERVAL 1 YEAR) THEN orders.price ELSE 0 END) AS yearly_price 
FROM 
    orders;