Pregunta

Tengo una declaración SQL similar a esta:

SELECT COUNT(*) AS foo, SUM(foo) AS foo_sum FROM bar

Pero MySQL no permite esto porque foo es un alias.¿Alguien tiene una idea de cómo se podría lograr esto en SQL?

¿Fue útil?

Solución

No, no se puede utilizar un alias en la lista de selección o una cláusula WHERE. Sólo se puede utilizar el alias en un GROUP BY, HAVING o ORDER BY.

También puede utilizar los alias definidos en una subconsulta:

SELECT foo, SUM(foo) AS foo_sum
FROM (
  SELECT COUNT(*) AS foo
  FROM bar
);

Otros consejos

SELECT SUM(foo) as foo_sum
FROM 
(
    SELECT COUNT(*) AS foo
    FROM bar
    GROUP BY baz
)

Creo que no es una buena idea.Si desea realizar una consulta importante, es mejor hacerlo sin una subconsulta.Usar COUNT(*) y funciones más grandes sin alias, si lo necesita.

Hice una consulta con alias y subconsultas.¡Tardó aproximadamente una hora!Luego reproduje la consulta sin el alias.Se redujo a unos 45 minutos.Olvídese de las subconsultas en esta situación.Es menos difícil y más bonito, pero hace que la consulta sea más lenta.

No sé lo que está tratando de hacer, pero con soluciones anteriores está ejecutando sub consulta en la tabla de alias que no es eficiente.

SELECT foo 
FROM (SELECT COUNT(*) AS foo FROM employees) AS T;

Básicamente T es su tabla de alias y devuelve la columna foo con el recuento que es solo registro y no hay sentido de utilizar la función SUMA (foo) en él, ya que es único registro.

De todas formas respuesta sencilla:

SELECT Count(1) AS foo from employees;

Dado que la función COUNT devolverá los mismos resultados independientemente de lo que NO campo nulo (s) se incluyen como los parámetros de la función count (es decir: dentro de los paréntesis), puede utilizar COUNT (1) para obtener un mejor rendimiento. Ahora el motor de base de datos no tendrá es posible obtener campos de datos, sino que simplemente va a recuperar el valor entero de 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top