Mysql 这个查询必须是最优的吗?如果没有,是否还有改进该查询的方法
我已经写了一个SQL查询,但我不知道它是不是最好的 我有两个表,关系为1-n 订单表Mysql 这个查询必须是最优的吗?如果没有,是否还有改进该查询的方法,mysql,Mysql,我已经写了一个SQL查询,但我不知道它是不是最好的 我有两个表,关系为1-n 订单表 |---------------------| | orderNumber | |---------------------| | status | |---------------------| 订单详情 |---------------------| | orderNumber | |---------------------| |
|---------------------|
| 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
哦,我不知道我们可以同时使用计算域的和。感谢我目前关于“更好”/“最好”等的一般评论:在工程中没有“更好”/“最好”这样的东西,除非你定义它。同样不幸的是,所有合理的实用定义都需要大量的经验,其中包含大量的因素,这些因素与对细节的敏感度混乱相互作用。做简单的设计。当你通过测量证明一个设计和你能想到的一切都有问题时(无论当时是什么意思),然后问一个非常具体的问题。还应定义“更好”/“最佳”。