Domanda

Ho un'istruzione SQL simile a questo:

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

Ma MySQL non permette questo perché foo è un alias. Qualcuno ha un'idea di come questo potrebbe essere realizzato in SQL?

È stato utile?

Soluzione

No, non è possibile utilizzare un alias nella select-list o di una clausola WHERE. È possibile utilizzare solo l'alias in un GROUP BY, HAVING o ORDER BY.

È inoltre possibile utilizzare gli alias definiti in una sottoquery:

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

Altri suggerimenti

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

Penso che non sia una buona idea. Se si vuole fare una grande domanda, è meglio farlo senza una subquery. Utilizzare COUNT(*) e funzioni più grandi, senza alias, se ne avete bisogno.

Ho fatto una query con alias e subquery. Ci sono voluti circa un'ora! Poi ho riprodotto la query senza l'alias. E 'andato verso il basso per circa 45 minuti. Dimenticate subquery in questa situazione. E 'meno difficile e più bella, ma rende la query più lenta.

Non so che cosa si sta cercando di fare, ma con le soluzioni di cui sopra si esegue sottoquery sulla tabella di alias che non è efficiente.

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

In sostanza T è la vostra tabella di alias e ritorna colonna foo con il conte, che è singolo record e non v'è alcun significato di utilizzare la funzione SUM (foo) su di esso dal momento che è singolo record.

In ogni modo la risposta semplice:

SELECT Count(1) AS foo from employees;

Poiché la funzione COUNT restituirà gli stessi risultati indipendentemente da ciò che NOT NULL campo (s) di includere i parametri della funzione COUNT (cioè: all'interno delle parentesi), è possibile utilizzare COUNT (1) per ottenere prestazioni migliori. Ora il motore di database non dovrà prendere tutti i campi di dati, invece sarà solo recuperare il valore intero di 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top