2013-10-31 122 views
0

订购样品数据:SQL的最高销售的产品

ORDER_DAY ORDER_ID PRODUCT_ID QUANTITY PRICE 
---------- --------- ----------- ---------- --------- 
01-JUL-11 O1  P1   5    5 
01-JUL-11 O2  P2   2    10 
01-JUL-11 O3  P3   10    25 
01-JUL-11 O4  P1   20    5 
02-JUL-11 O5  P3   5    25 
02-JUL-11 O6  P4   6    20 
02-JUL-11 O7  P1   2    5 
02-JUL-11 O8  P5   1    50 
02-JUL-11 O9  P6   2    50 
02-JUL-11 O10  P2   4    10 

问:我拿最高销售的产品(数量*价格)这两天

所需的输出:

DATE  PRODUCT_ID SOLD_AMOUNT 
01-JUL-11  P3  250 
02-JUL-11  P3  125 
+2

拉克什嗨,你似乎是新来的。 在寻求帮助之前,一定要自己去解决问题,向我们展示你的尝试。你有没有尝试过使用谷歌搜索吗?你发现了什么?为什么它不能帮助你? –

回答

-3
select order_day as orderdate,product_id,max(quantity * price) as sold_amount 
from order 
group by order_day 
order by product_id 
+0

为什么downvote?任何原因? –

+0

那么,不知道为什么downvote,但分组是错误的肯定。 –

+0

因为这只是错误的。 –

-1
select t.ORDER_DAY as date1 ,t.PRODUCT_ID,max(t.quantity * t.price) 
as sold_amount from table t group by t.ORDER_DAY,t.PRODUCT_ID 
+0

不,您甚至没有使用group by。这应该如何工作呢? –

+0

@ThorstenKettner:更新了它 –

+0

好的,现在在语法上很好。但是,您选择每天和产品的最大利润,而不是每天的最大利润:-)所需的查询其实并不那么简单,正如您从我自己的答案中看到的那样。 –

-1

select date,product_id,max(product_id * price)as sold_amount form order group by order_day order by order_day

+0

不可以。您按order_day分组。那么你想要显示哪个product_id? –

0

您将从获取每天和产品的销售金额开始。有了这些数据,你首先选择每天最大的利润,然后选择符合此的条目:

WITH PRODUCT_PER_DAY AS 
(
    SELECT ORDER_DAY, PRODUCT_ID, SUM(QUANTITY * PRICE) AS SOLD_AMOUNT 
    FROM MYTABLE 
    GROUP BY ORDER_DAY, PRODUCT_ID 
) 
SELECT ORDER_DAY, PRODUCT_ID, SOLD_AMOUNT 
FROM PRODUCT_PER_DAY 
WHERE (ORDER_DAY, SOLD_AMOUNT) IN 
(
    SELECT ORDER_DAY, MAX(SOLD_AMOUNT) 
    FROM PRODUCT_PER_DAY 
    GROUP BY ORDER_DAY 
) 
ORDER BY ORDER_DAY, PRODUCT_ID; 
-2

请使用这个查询,你会期望的output.I在MySQL都试过了。

SELECT 
order_date, 
Product_id, 
sold_amount 
FROM 
(
    SELECT 
     date_format(order_day,'%d-%b-%y') AS order_date, 
     Product_id, 
     SUM(price*quantity) AS sold_amount 
    FROM 
     ecommerce 
    GROUP BY 
     date_format(order_day,'%d-%b-%y'), 
     product_id) a 
WHERE 
(
    order_date,sold_amount) IN 
(
    SELECT 
     DATE, 
     MAX(sold_amt) AS sold_amount 
    FROM 
     (
      SELECT 
       date_format(order_day,'%d-%b-%y') AS DATE, 
       product_id, 
       SUM(price*quantity) AS sold_amt 
      FROM 
       ecommerce 
      GROUP BY 
       date_format(order_day,'%d-%b-%y'), 
       product_id)a 
    GROUP BY 
     DATE) 
0

尝试以下查询:

select order_day, product_id, totalsale 
from (select order_day, 
      product_id, 
      nvl(QUANTITY, 0) * PRICE as totalsale, 
      dense_rank() over(partition by ORDER_DAY order by(nvl(QUANTITY, 0) * PRICE) desc) as maxsum 
     from orders) 
where maxsum = 1; 
0
select b.product_id,a.order_day,a.total_price from(select order_day, max(quantity*price)as total_price from order group by order_day)a 
join (select product_id , quantity * price as total_amount from order)b on 
a.total_price= b.total_price 
0

尝试了这一点(修改表和列名称按您的需要):

Select a.order_day, b.product_id, a.sales 
    from 
      (select order_day, max(quantity*price) as sales 
      from ordr 
      group by order_day) a 
    inner join 
     (select order_day, product_id, quantity*price as sales 
      from ordr) b 
    on a.order_day = b.order_day and a.sales = b.sales;