Documentation Home

B.3.4.4 列别名问题

可以在查询选择列表中使用别名来为列赋予不同的名称。GROUP BY您可以在、ORDER BY或 子句中使用别名HAVING来引用该列:

SELECT SQRT(a*b) AS root FROM tbl_name
  GROUP BY root HAVING root > 0;
SELECT id, COUNT(*) AS cnt FROM tbl_name
  GROUP BY id HAVING cnt > 0;
SELECT id AS 'Customer identity' FROM tbl_name;

WHERE标准 SQL 不允许在子句 中引用列别名 。施加此限制是因为在WHERE评估子句时,列值可能尚未确定。例如,以下查询是非法的:

SELECT id, COUNT(*) AS cnt FROM tbl_name
  WHERE cnt > 0 GROUP BY id;

WHERE子句确定哪些行应包含在GROUP BY子句中,但它指的是一个列值的别名,该别名在行被选择并由 分组之后才为人所知 GROUP BY

在查询的选择列表中,可以使用标识符或字符串引号字符指定带引号的列别名:

SELECT 1 AS `one`, 2 AS 'two';

在语句的其他地方,对别名的引用必须使用标识符引用,否则引用将被视为字符串文字。例如,此语句按列中的值分组id,使用别名引用`a`

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY `a`;

此语句按文字字符串分组, 'a'但并不像您预期​​的那样工作:

SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
  GROUP BY 'a';