2016-11-09 4 views
0

Ich möchte einige Statistiken drucken, damit ich den folgenden Code haben:Warum funktioniert ORDER BY in diesem Fall nicht?

(SELECT 'There are total', COUNT(Name), 'doctors.' FROM OCCUPATIONS 
WHERE Occupation = 'Doctor') 
UNION 
(SELECT 'There are total', COUNT(Name), 'singers.' FROM OCCUPATIONS 
WHERE Occupation = 'Singer') 
UNION 
(SELECT 'There are total', COUNT(Name), 'actors.' FROM OCCUPATIONS 
WHERE Occupation = 'Actor') 
UNION 
(SELECT 'There are total', COUNT(Name), 'professors.' FROM OCCUPATIONS 
WHERE Occupation = 'Professor') 
ORDER BY COUNT(Occupation); 

Es zählt die Vorkommen jedes Besatzung. Ich muss diese 4 Zeilen, die jedem Beruf entsprechen, auch nach den Vorkommen sortieren. Mein Code scheint aber nicht zu funktionieren:

ERROR 1054 (42S22) at line 4: Unknown column 'Occupation' in 'order clause' 

Was ist falsch und wie kann man es beheben?

Antwort

3

Sie müssen COUNT(Name) an Alias ​​und den Alias ​​in der ORDER BY verwenden:

(SELECT 'There are total', COUNT(Name) OccupationCount, 'doctors.' FROM OCCUPATIONS 
WHERE Occupation = 'Doctor') 
UNION 
(SELECT 'There are total', COUNT(Name), 'singers.' FROM OCCUPATIONS 
WHERE Occupation = 'Singer') 
UNION 
(SELECT 'There are total', COUNT(Name), 'actors.' FROM OCCUPATIONS 
WHERE Occupation = 'Actor') 
UNION 
(SELECT 'There are total', COUNT(Name), 'professors.' FROM OCCUPATIONS 
WHERE Occupation = 'Professor') 
ORDER BY OccupationCount; 

aber Sie müssen nicht UNION für diese verwenden. Sie könnten leicht COUNT und GROUP BY mit einer WHERE-Klausel verwenden:

SELECT 
    'There are total', 
    COUNT(Name) OccupationCount, 
    CONCAT(LOWER(Occupation), 's') 
FROM OCCUPATIONS 
WHERE Occupation IN('Doctor', 'Singer', 'Actor', 'Professor') 
GROUP BY Occupation 
ORDER BY OccupationCount; 
+0

Es ist oft eine gute Idee, Ihre Spalten trotzdem zu benennen. – yakatz

1

Sie können es tun, indem Sie die Spaltennummer, anstatt unter Verwendung des Ausdrucks:

ORDER BY 2 

... wird von der zweiten Spalte sortieren.

Count(Occupations) ist nicht etwas, das in der select Liste vorkommt oder anderweitig verfügbar ist. Ich nehme an, Sie beabsichtigten, in jeder der Unterabfragen zu sortieren, was Count(name) ist.

Verwandte Themen