我有一张订单表。我希望在单个查询中获得每周,每月和每年的订单价格总和。我怎么能这样做?
如果我将查询分开,这很容易。我的查询是:
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_price
,monthly_price
和yearly_price
的答案?
答案 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;