Frage

Ich habe eine SQL-Anweisung wie diese:

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

Aber MySQL nicht erlaubt dies, weil foo ist ein alias.Hat jemand eine Idee, wie dies erreicht werden könnte, die in SQL?

War es hilfreich?

Lösung

Nein, Sie kann nicht mit einem alias in der select-Liste oder eine WHERE-Klausel.Sie können nur verwenden Sie den alias in eine GROUP BY -, HAVING-oder ORDER BY.

Sie können auch Aliase in einer Unterabfrage:

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

Andere Tipps

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

Ich denke, es ist keine gute Idee.Wenn Sie wollen eine große Abfrage ist, ist es besser, es zu tun, ohne eine Unterabfrage.Verwenden COUNT(*) und größere Funktionen, ohne alias, wenn Sie es brauchen.

Ich machte eine Abfrage mit alias-Namen und Unterabfragen.Es dauerte über eine Stunde!!!Dann habe ich reproduziert die Abfrage ohne den alias.Es ging um etwa 45 Minuten.Vergessen Sie Unterabfragen in dieser situation.Es ist weniger hart und mehr ziemlich, aber es macht die Abfrage langsamer.

Ich weiß nicht, was Sie versuchen zu tun, sondern mit oben genannten Lösungen ausgeführt werden Unterabfrage auf die alias-Tabelle die nicht effizient.

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

Im Grunde ist T, Ihre alias-Tabelle, und es gibt foo Spalte mit Graf die einzige Platte, und es gibt keinen Sinn mit SUM(foo) - Funktion auf, denn Sie ist single record.

Anyways einfache Antwort:

SELECT Count(1) AS foo from employees;

Da die COUNT-Funktion werden dieselben Ergebnisse zurückgegeben, unabhängig davon, was NICHT NULL-Feld(en), die Sie enthalten, wie die COUNT-Funktion Parameter (dh:innerhalb der Klammern), die Sie verwenden können, COUNT(1), um bessere Leistungen zu erzielen.Nun ist die Datenbank-engine nicht Holen müssen alle Datenfelder, stattdessen wird es nur abrufen der integer-Wert von 1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top