Mysql 为什么';在这种情况下,你不能按工作顺序订购吗?

Mysql 为什么';在这种情况下,你不能按工作顺序订购吗?,mysql,sql,Mysql,Sql,我想打印一些统计数据,因此我有以下代码: (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 tota

我想打印一些统计数据,因此我有以下代码:

(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);
它统计每个职业的发生次数。我还需要根据出现的情况对这4行进行排序,这4行对应于每个职业。但是,我的代码似乎不起作用:

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

有什么问题以及如何修复?

您需要别名
计数(Name
)并按
顺序使用该别名:

(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
进行这些操作。您可以轻松地使用
COUNT
groupby
WHERE
子句:

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;

您需要别名
COUNT(Name
)并按
顺序使用该别名:

(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
进行这些操作。您可以轻松地使用
COUNT
groupby
WHERE
子句:

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;

可以使用列编号而不是表达式来执行此操作:

 ORDER BY 2
。。。将按第二列进行排序


计数(职业)
不是出现在
选择
列表中的内容,也不是可用的内容。我假设您打算对每个子查询中的
计数(名称)
进行排序。

您可以使用列编号而不是表达式:

 ORDER BY 2
。。。将按第二列进行排序

计数(职业)
不是出现在
选择
列表中的内容,也不是可用的内容。我假设您打算对每个子查询中的
Count(name)
进行排序