如何将此查询与一列上的重复值分组,另一列不包含重复数据?

时间:2018-03-30 19:26:43

标签: sql postgresql

我正在练习SQL,并且我试图通过商店中的部分查询畅销书,到目前为止我有这个问题:

select idrama, nombre, apellido, max(valortotal)
from(
select personarama.idrama, persona.nombre, persona.apellido,sum(detalle.cantidad*precio.valor) as valortotal 
    from persona,factura,precio,detalle, personarama
   where persona.idpersona=factura.idvendedor
     and personarama.idpersona=persona.idpersona
     and factura.numfactura=detalle.numfactura
      and precio.referencia=detalle.referencia
      and factura.fecha between precio.fechaini and precio.fechafin
      group by persona.idpersona, personarama.idrama, persona.nombre, persona.apellido
      order by 4 DESC
) as vendedorRama
group by idrama, nombre, apellido;

当我执行查询时,我会按部分获得卖家以及他们已售出的金额。

enter image description here

而且我需要按部分获得最畅销的产品,唯一的方法是按照idrama进行分组,但是使用此解决方案我无法获得卖家的名字和名字。如何在不丢失这些列的情况下对这些数据进行分组?

1 个答案:

答案 0 :(得分:0)

你可以使用这样的窗口函数:

select DISTINCT idrama, nombre, apellido, max(valortotal) OVER (PARTITION BY idrama) AS 'Max_of_valortotal'
    from(
    select personarama.idrama, persona.nombre, persona.apellido,sum(detalle.cantidad*precio.valor) as valortotal 
        from persona,factura,precio,detalle, personarama
       where persona.idpersona=factura.idvendedor
         and personarama.idpersona=persona.idpersona
         and factura.numfactura=detalle.numfactura
          and precio.referencia=detalle.referencia
          and factura.fecha between precio.fechaini and precio.fechafin
          group by persona.idpersona, personarama.idrama, persona.nombre, persona.apellido
          order by 4 DESC
    ) as vendedorRama