cod_Prod product seller price 123 A XPTO 10 123 A POTY 20 123 A MUY 15Y consulto el precio máximo y mínimo de los productos de la siguiente manera:
select cod_Prod, product, max(price) as maxprice, min(price) as minprice from tablename group by cod_Prod, productY me sale esto, que es correcto:
cod_Prod product maxprice minprice 123 A 20 10¿Cómo puedo obtener el vendedor con el precio más alto y más bajo en la misma consulta, como este resultado:
cod_Prod product maxprice seller_maxprice minprice seller_minprice 123 A 20 POTY 10 XPTOUsar ROW_NUMBER con lógica pivotante sería una forma de hacerlo aquí:
WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY cod_Prod ORDER BY price) rn_low, ROW_NUMBER() OVER (PARTITION BY cod_Prod ORDER BY price DESC) rn_high FROM tablename ) SELECT cod_Prod, product, MAX(price) FILTER (WHERE rn_high = 1) AS maxprice, MAX(seller) FILTER (WHERE rn_high = 1) AS seller_maxprice, MAX(price) FILTER (WHERE rn_low = 1) AS minprice, MAX(seller) FILTER (WHERE rn_low = 1) AS seller_minprice FROM cte GROUP BY cod_Prod, product;Un enfoque un poco más pesado, que requerirá los complementos para cod_Prod y product:
with get_id as( select distinct cod_Prod , product from tablename where cod_Prod = 123 and product = 'A' ), get_max as( select st.cod_Prod , st.product , st.seller, st.price from tablename st, get_id main where st.cod_Prod = main.cod_Prod and st.product = main.product order by st.price desc limit 1 ), get_min as( select st.cod_Prod , st.product , st.seller, st.price from tablename st, get_id main where st.cod_Prod = main.cod_Prod and st.product = main.product order by st.price limit 1 ) select get_id.cod_Prod , get_id.product , get_min.price as min_price, get_min.seller as seller_minprice , get_max.price as max_price, get_max.seller as seller_maxprice from get_id left join get_max on get_id.cod_Prod = get_max.cod_Prod and get_id.product = get_max.product left join get_min on get_id.cod_Prod = get_min.cod_Prod and get_id.product = get_min.product