Mysql不是我最强的语言!但是我很高兴能够产生一些能够产生正确结果的东西,否则会涉及三个独立的(php)查询。
但我不确定这是否理想。这是查询:
SELECT * FROM
(
(SELECT sum(price) AS day FROM sales WHERE sold_date > DATE_SUB(NOW(), INTERVAL 1 DAY)) as day,
(SELECT sum(price) AS week FROM sales WHERE sold_date > DATE_SUB(NOW(), INTERVAL 1 WEEK)) as week,
(SELECT sum(price) AS month FROM sales WHERE sold_date > DATE_SUB(NOW(), INTERVAL 1 MONTH)) as month
)
WHERE 1
它给出了这个美丽的结果:
+--------+---------+----------+
| day | week | month |
+--------+---------+----------+
| 356.00 | 2393.00 | 11026.00 |
+--------+---------+----------+
我无法快乐。
然而,对于大型数据库,我担心这个查询结构可能太多了?
我如何确保这不是一个资源匮乏?
答案 0 :(得分:1)
您的查询效率可能非常高。但是,您可以使用条件聚合来尝试:
select sum(case when sold_date > DATE_SUB(NOW(), INTERVAL 1 DAY) then price else 0 end) as "day",
sum(case when sold_date > DATE_SUB(NOW(), INTERVAL 1 WEEK) then price else 0 end) as "week",
sum(case when sold_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) then price else 0 end) as "month"
from sales
where sold_date > DATE_SUB(NOW(), INTERVAL 1 MONTH);
在sales(sold_date)
上建立索引应该有助于查询。 sales(sold_date, price)
上的索引应该更好。