2016-06-19 136 views
0

我必须编写一个MySQL查询: 查找在两天(01-JUL-11和02-JUL-11)上销售的产品和总数产品销售。MySQL查询查找在两天中销售的产品

表看起来像:

Date, Order_id, Product_id, Quantity 
'01-JUL-11',O1,P1,5 
'01-JUL-11',O2,P2,2 
'01-JUL-11',O3,P3,10 
'01-JUL-11',O4,P1,10 
'02-JUL-11',O5,P3,5 
'02-JUL-11',O6,P4,6 
'02-JUL-11',O7,P1,2 
'02-JUL-11',O8,P5,1 
'02-JUL-11',O9,P6,2 
'02-JUL-11',O10,P2,4 

输出:

P1 17 
P2 6 
P3 15 

到目前为止,我已经试过是:

SELECT PRODUCT_ID, TOTAL FROM 
(SELECT PRODUCT_ID, COUNT(PRODUCT_ID) AS COUNTER, SUM(TOTAL) TOTAL FROM 
(Select ORDER_DAY, PRODUCT_ID, SUM(QUANTITY) AS TOTAL 
FROM ORDERS 
GROUP BY ORDER_DAY, PRODUCT_ID) ALIAS_1 
GROUP BY PRODUCT_ID) ALIAS_2 
WHERE COUNTER > 1; 

它给出正确的输出,但我认为它可以优化。

+0

非常不清楚你问这里 – Drew

+0

@Drew我做编辑。让我知道如果它仍然不清楚。 – Raj

回答

0

如果表只有这两个日期,那么你的查询应该工作。唯一的区别是如果桌面上还有其他日期,您应该指定您想要的日期。

看到sqlfiddle:http://sqlfiddle.com/#!9/f700a5/6

Select `PRODUCT_ID`, SUM(`QUANTITY`) 
FROM ORDERS 
WHERE `ORDER_DAY` = '01-JUL-11' OR `ORDER_DAY` = '02-JUL-11' 
GROUP BY PRODUCT_ID; 
+0

查找这两天都销售的产品,我不认为你的查询工作正常。 – Raj

+0

您只需要7月1日和2日售出的产品? –

+0

如果产品仅在特定日期中的某一天销售,那么您不希望产品中含有该产品? –

0

右键查询此:

SELECT `PRODUCT_ID`, SUM(`QUANTITY`) 
FROM ORDERS 
WHERE `ORDER_DAY` = '01-JUL-11' OR `ORDER_DAY` = '02-JUL-11' 
GROUP BY `PRODUCT_ID` 
HAVING COUNT(`ORDER_DAY`) > 1; 

这会给你正确的结果。

0

这是最简单的答案

SELECT PRODUCT_ID, SUM (QUANTITY) 
FROM CUSTOMER 
WHERE DATE = '01-01-2001' 
GROUP BY PRODUCT_ID 
MINUS 
SELECT PRODUCT_ID, SUM (QUANTITY) 
FROM CUSTOMER 
WHERE DATE = '01-02-2001' 
GROUP BY PRODUCT_ID; 
0

尝试了这一点:

select product_id, sum(quantity) as total 
    from orders 
    group by product_id 
    having count(order_day) > 1;