查询如何与缺少的值按值

时间:2015-08-19 17:09:59

标签: sql oracle

我正在尝试编写一个查询,以便在一天之内提取总折扣以及客户订单的收入。请注意,对于每个ship_id,将有几个项目,所以我希望得到如下的sum子句,最后,我有那个group by,我想通过ship_id对它们进行分组(这对于每个订单都是唯一的)。

我得到了2M行的结果(这可能是正确的,因为我们很大)但我不确定我的小组是否正确。如果我只把ship_id放在那里怎么办?我的查询如何理解它?

            d.ship_id 
            ,to_char(d.order_datetime,'yyyy/mm/dd hh24:mi:ss') as datetime_order
            ,to_char(d.order_datetime, 'D') as day_order
            ,to_char(d.order_datetime, 'MM') as month_order
            ,sum(di.discount) as discount 
            ,sum(di.price * di.units) AS price 

        FROM 
            table1 d 
            JOIN 
            table2 di
            ON 
                d.ship_id = di.ship_id
       GROUP BY
            d.ship_id
            ,to_char(d.order_datetime,'yyyy/mm/dd hh24:mi:ss') 
            ,to_char(d.order_datetime, 'D') 
            ,to_char(d.order_datetime, 'MM') 

2 个答案:

答案 0 :(得分:0)

在此查询中,您按

对结果进行分组
  • ship_id(订单)
  • d.order_datetime yyyy / mm / dd hh24:mi:ss(我认为这是错误的,如果你只需要按天分组)这个组按天​​,月,年,小时,分钟和秒分组< / p>

  • d.order_datetime'D'(按天分组正确)

  • d.order_datetime'mm'(按月分组正确,不会更改按天分组的结果)

P.S。:我不认为顾客在任何地方进行分组。

答案 1 :(得分:0)

您的查询将通过以下方式对由itens分组的所有值进行sumari:

如果你把,像:

Select ship_id, ,sum(di.discount) as discount 
        ,sum(di.price * di.units) AS price from table1 group by ship_id

查询将返回由ship_id分组的价格和折扣,当您创建组时,必须将所有非*聚合字段放在group by上。

*聚合功能(Sum,AVG,count ...)

尝试更好地解释您的问题,让我了解您的情况(问题)。