Php 艰难的Mysql查询
我得到了一个快速mysql查询的技能测试。我得到了以下表格:Php 艰难的Mysql查询,php,mysql,Php,Mysql,我得到了一个快速mysql查询的技能测试。我得到了以下表格: Orders OrderItems ---------------------------------------- id id date order_id(Orders.id) shipping_amount produ
Orders OrderItems
----------------------------------------
id id
date order_id(Orders.id)
shipping_amount product_id
order_status price
customer_id quantity
我需要显示订单id和总数,包括2003年6月1日之前的发货金额和记录
输出应该是
| OrderID | OrderTotal |
+-----------+------------+
| 13230 | $55.00 |
| 54455 | $40.00 |
| 59694 | $33.04 |
| 39495 | $21.05 |
提示是使用GROUPBY或subselect。到目前为止,我有以下声明,但不确定下一步要做什么
Select id AS OrderId,***(not sure what to do here)
from Orders join OrderItems on Orders.id=OrderItems.id
我得说它一定是这样的:
SELECT O.ID as OrderID, SUM(OI.price * OI.quantity) AS OrderTotal
FROM Orders O
INNER JOIN OrderItems OI ON O.id = OI.order_Id
WHERE date < '2003-06-01'
GROUP BY O.id
ORDER BY SUM(price * quantity) DESC
虽然不确定如何在MySQL中格式化日期,或者您是否可以在此版本中通过agregate函数进行排序,但我非常确定这是一个良好的开端。我没有访问MySQL数据库的权限进行测试,但我可以想象它看起来像这样:
select
o.id OrderID,
(select sum(oi.price * oi.quantity) from order_items oi where oi.order_id = o.id) + o.shipping_amount OrderTotal
from
orders o
where
o.date < str_to_date('2003-06-01', '%Y-%m-%d');
这里测试的是谁的技能?为什么不演示如何获得所有订单总数,这样每个订单id将有几个总数。那么,一旦你展示了这一点,帮助指导你可能更有意义,但是,你读过关于select语句的mysql手册了吗?这毕竟是一个测试。我知道测试就是测试。我确实经常编写mysql查询,但我只是没有机会处理这种复杂的查询。我希望在这个问题上能得到一些提示。不过,谢谢你的建议……我一定会在阅读手册的同时尝试写一个你理解的问题,当你改正错误时,你都知道错误在哪里。记住,考验你的是你的技能。不要担心每一个错误都是一个很好的教训。MySQL日期恰好接受YY-MM-DD,因此您不必担心解析它。@Charles:您不能假设有人会使用这种格式-显式转换为日期/日期时间/时间戳是最安全的方法+1,BrandonOKay,在这种特殊情况下,您不需要担心解析它+1:假设OP希望看到ordertotal为零的订单,将内部联接更改为左联接,并使用COALESCE将NULL更改为零。一旦您执行一些查询,就会变得更容易:我认为这是基于问题描述的最佳答案,假设价格为每件商品。但是如果价格是数量的总成本,那么不要用价格乘以数量