2016-11-09 90 views
0

我想打印一些统计信息,因此我有以下代码:为什么ORDER BY在这种情况下工作?

(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); 

它计算每个职业的出现。我还需要根据这些事件将这四行分类。我的代码似乎没有工作:

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

什么是错的,以及如何解决它?

回答

3

您需要别名COUNT(Name),并用该别名在ORDER BY

(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; 

不过,你不必使用UNION这些。你可以很容易地使用COUNTGROUP BYWHERE条款:

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

无论如何,命名列通常是一个好主意。 – yakatz

1

您可以通过使用列号,而不是表达的做到这一点:

ORDER BY 2 

...将由第二列进行排序。

Count(Occupations)不是发生在select列表中,或者以其他方式可用。我假设你打算在每个子查询中排序Count(name)

相关问题