Entiendo que la función MAX devuelve un valor máximo de una columna determinada para una columna numérica. Quiero devolver el recuento máximo de una columna. La siguiente tabla tiene dos columnas fabricante, producto.
maker product A Printer B Laptop B Laptop A Printer A Monitor A Printer A ScannerPero cuando ejecuto la consulta '''select maker, max(type) from table group by maker; ''' Obtengo el resultado como
maker product A Monitor B LaptopQuiero qué producto tiene un recuento máximo con respecto al fabricante como se muestra a continuación.
maker product A Printer B LaptopNota: Como el recuento de fabricantes es diferente, no podemos establecer un número común en la cláusula Tener.
Puede hacerlo con la función de ventana RANK() :
select t.maker, t.product from ( select maker, product, rank() over (partition by maker order by count(*) desc) rn from tablename group by maker, product ) t where t.rn = 1 Ver la demostración .
Resultados:
| maker | product | | ----- | ------- | | A | Printer | | B | Laptop |En PostgreSQL, la solución más simple es usar DISTINCT ON :
SELECT DISTINCT ON(maker) maker, product FROM atable GROUP BY maker, product ORDER BY maker, count(*) DESC;