我正在练习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;
当我执行查询时,我会按部分获得卖家以及他们已售出的金额。
而且我需要按部分获得最畅销的产品,唯一的方法是按照idrama进行分组,但是使用此解决方案我无法获得卖家的名字和名字。如何在不丢失这些列的情况下对这些数据进行分组?
答案 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