Mysql 这个查询必须是最优的吗?如果没有,是否还有改进该查询的方法

Mysql 这个查询必须是最优的吗?如果没有,是否还有改进该查询的方法,mysql,Mysql,我已经写了一个SQL查询,但我不知道它是不是最好的 我有两个表,关系为1-n 订单表 |---------------------| | orderNumber | |---------------------| | status | |---------------------| 订单详情 |---------------------| | orderNumber | |---------------------| |

我已经写了一个SQL查询,但我不知道它是不是最好的

我有两个表,关系为1-n

订单表

|---------------------|
|      orderNumber    | 
|---------------------|
|          status     |
|---------------------|
订单详情

|---------------------|
|      orderNumber    | 
|---------------------|
|          quantity   |
|---------------------|
|       price         |
|---------------------|
我想获得状态为“已发货”且总价大于1500且总价排序下降的订单

SELECT * FROM order JOIN 
       (Select sub1.orderNumber, SUM(sub1.totalEach) AS total FROM (
          select (quantity * price) AS totalEach, orderNumber FROM orderDetail)
      AS sub1 GROUP BY sub1.orderNumber HAVING total > 1500 ORDER BY total DESC
      ) AS sub2 
      ON order.orderNumber = sub2.orderNumber 
      WHERE order.status = 'shipped'

可以避免子查询;并使用两个表之间的
内部联接
,以及使用
groupby
Having
来处理此问题

请尝试以下操作:

SELECT o.orderNumber, 
       o.status, 
       SUM(od.quantity * od.price) AS total   
FROM order AS o 
JOIN orderDetail AS od ON o.orderNumber = od.orderNumber 
WHERE o.status = 'shipped' 
GROUP BY o.orderNumber, o.status 
HAVING total > 1500 
ORDER BY totalEach DESC 

哦,我不知道我们可以同时使用计算域的和。感谢我目前关于“更好”/“最好”等的一般评论:在工程中没有“更好”/“最好”这样的东西,除非你定义它。同样不幸的是,所有合理的实用定义都需要大量的经验,其中包含大量的因素,这些因素与对细节的敏感度混乱相互作用。做简单的设计。当你通过测量证明一个设计和你能想到的一切都有问题时(无论当时是什么意思),然后问一个非常具体的问题。还应定义“更好”/“最佳”。