Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何确保嵌套选择查询的效率?_Mysql_Sql - Fatal编程技术网

Mysql 如何确保嵌套选择查询的效率?

Mysql 如何确保嵌套选择查询的效率?,mysql,sql,Mysql,Sql,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_dat

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 |
+--------+---------+----------+
我再高兴不过了

然而,对于一个大型数据库,我担心这个查询结构可能太多了


我如何才能确保这不是一个注定的资源猪

您的查询可能会出人意料地高效。但是,您可以尝试使用条件聚合:

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);

销售(销售日期)
上建立索引有助于查询。销售指数(销售日期、价格)应该更好。

Wow!我觉得自己就像公主新娘身上的巨人。。。“我做对了…!?”我会插上这个,看看它是否运行得更快。谢谢!