# B.3.4.4 列别名问题
可以在查询选择列表中使用别名来为列指定不同的名称。您可以在中使用别名通过...分组
,订购方式
, 要么拥有
引用列的子句:
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;
标准 SQL 不允许在在哪里
条款。施加此限制是因为当在哪里
子句被评估,列值可能尚未确定。例如,以下查询是非法的:
SELECT id, COUNT(*) AS cnt FROM tbl_name
WHERE cnt > 0 GROUP BY id;
这在哪里
子句确定哪些行应包含在通过...分组
子句,但它指的是列值的别名,在选择行并按通过...分组
.
在查询的选择列表中,可以使用标识符或字符串引用字符指定带引号的列别名:
SELECT 1 AS `one`, 2 AS 'two';
在语句的其他地方,对别名的引用引用必须使用标识符引用,否则引用被视为字符串文字。例如,此语句按列中的值分组id
, 使用别名引用一种
:
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
GROUP BY `a`;
此语句按文字字符串分组'一种'
并且不像您预期的那样工作:
SELECT id AS 'a', COUNT(*) AS cnt FROM tbl_name
GROUP BY 'a';