2016-12-02 64 views
-1

好吧,我有一个表3表(订单,ORDER_DETAILS,产品)MySQL查询的所有月份,以获得特定项目的数据

订单

id | order_date 
1 | March-01-13 
2 | March-02-13 
3 | April-01-13 
4 | May-01-13 
5 | June-01-13 
and so on..... 

ORDER_DETAILS

id | order_id | product_id | total_price 
1   1   1   100  /*mouse*/ 
2   1   3   200 /*monitor*/ 
3   2   2   50  /*keyboar*/ 
4   2   3   200 /*monitor*/ 
and so on.... 

产品

id | title 
1  mouse 
2  keyboard 
3  monitor 
and so on... 

这里是我的SQL查询,给予意想不到的输出

SELECT title, SUM(total_price) as total_price, orders.order_date as date 
FROM products 
LEFT JOIN order_details 
ON order_details.product_id=products.id 
LEFT JOIN orders 
ON orders.id=order_details.order_id 
WHERE title='monitor'     /*this is just a try, prod_id should be the one*/ 
GROUP BY MONTH(date) 
ORDER BY total_price DESC LIMIT 10 

我想是的product_id的所有月份的TOTAL_PRICE

期望输出

title | total_price | date 
monitor  400   March 

回答

1

使用GROUP BY时,SELECT列表中的所有字段都需要进行聚合或成为GROUP BY的一部分。因此,试图通过添加“称号”到组,并添加MONTH函数来order_date的SELECT列表如下:

SELECT title, SUM(total_price) as total_price, MONTH(orders.order_date) as date 
FROM products 
LEFT JOIN order_details ON order_details.product_id=products.id 
LEFT JOIN orders ON orders.id=order_details.order_id 
WHERE title='monitor'     
GROUP BY title, date 
ORDER BY total_price DESC LIMIT 10 

这将得到TOTAL_PRICE每个产品每个月份。

+0

谢谢。有用。那个月的每一天的“total_price”如何? – Emjey23

0

你想要一些像这样的事情?

SELECT p.title, SUM(total_price) as total_price 
FROM products p LEFT JOIN 
    order_details od 
    ON od.product_id = p.id LEFT JOIN 
    orders o 
    ON o.id = od.order_id 
GROUP BY p.title 
ORDER BY total_price DESC 
LIMIT 10; 

我不明白为什么您的示例输出将有一个月在它。

+0

我的图表数据将需要月份。所以它必须有一个月,我想。 – Emjey23

相关问题