Question

J'ai une instruction SQL similaire à ceci:

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

Mais MySQL ne permet pas cela parce que foo est un alias. Est-ce que quelqu'un a une idée de la façon dont cela pourrait se faire dans SQL?

Était-ce utile?

La solution

Non, vous ne pouvez pas utiliser un alias dans la liste de sélection ou une clause WHERE. Vous ne pouvez utiliser l'alias dans GROUP BY, HAVING ou ORDER BY.

Vous pouvez également utiliser les alias définis dans une sous-requête:

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

Autres conseils

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

Je pense que ce n'est pas une bonne idée. Si vous voulez faire une grande requête, il est préférable de le faire sans sous-requête. Utilisez et de plus grandes fonctions COUNT(*) sans alias, si vous en avez besoin.

J'ai fait une requête avec les alias et les sous-requêtes. Il a fallu environ une heure! Ensuite, je reproduis la requête sans l'alias. Il est descendu à environ 45 minutes. Oubliez les sous-requêtes dans cette situation. Il est moins dur et plus jolie, mais il rend votre requête plus lent.

Je ne sais pas ce que vous essayez de faire, mais avec des solutions ci-dessus vous exécutez sur la table sous-requête d'alias qui n'est pas efficace.

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

En gros T est votre table d'alias et retourne colonne foo avec un nombre qui est seul enregistrement et il n'y a pas de sens d'utiliser la fonction SOMME (foo) sur lui car il est seul enregistrement.

Anyways réponse simple:

SELECT Count(1) AS foo from employees;

Puisque la fonction COUNT renvoie les mêmes résultats indépendamment de ce pas de champ NULL (s) vous incluez les paramètres de la fonction COUNT (ex: dans les parenthèses), vous pouvez utiliser COUNT (1) pour obtenir de meilleures performances. Maintenant, le moteur de base de données ne devra pas chercher tous les champs de données, au lieu il suffit de récupérer la valeur entière de 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top