La siguiente consulta: SELECT * FROM products WHERE price > (SELECT AVG(price) FROM products) selecciona todos los productos con precios por encima del promedio.
¿Es posible hacer esto usando funciones agregadas de alguna manera en lugar de una subconsulta ( SELECT anidada) o una Expresión de tabla común ( WITH ).
Estoy preguntando principalmente sobre Postgres, pero MySQL o SQL Server también ayudan.
Algo así como SELECT * FROM products HAVING price > AVG(price) , que no funciona.
Creo que la respuesta es no.
Y hay una línea adicional porque la respuesta debe tener al menos 30 caracteres.
Podemos lograr esto usando la unión interna. Consulte la siguiente consulta.
SELECT p1.* FROM products P1 inner join (SELECT AVG(price)as price FROM products) P2 on P1.price > P2.priceLa tabla derivada para esta solución es solo azúcar sintáctica para poder aplicar una condición where en el alias de la columna:
select * from ( select p.*, avg(price) over() as avg_price from products ) t where price > avg_price;