首页 > 解决方案 > 使用聚合函数在 SQL 中使用 AS 命名列

问题描述

所以这是我最初的查询,它有效:

DECLARE @total AS FLOAT;
SET @total =(SELECT COUNT(*) FROM Crimes)

SELECT
    Areas.Area,
    Areas.AreaName,
    COUNT(*) AS Total, 
    Round(CONVERT(float,(COUNT(*) / @total) * 100),3)
FROM Areas
INNER JOIN Crimes
    ON(Areas.Area = Crimes.Area)
GROUP BY
    Areas.AreaName,
    Areas.Area

我所做的唯一更改是将聚合函数重命名为“百分比”,这表示区域和区域名称两列存在无法绑定的问题,我不知道为什么。

新变化:

DECLARE @total AS FLOAT;
SET @total =(SELECT COUNT(*) FROM Crimes)
SELECT
    Areas.Area,
    Areas.AreaName,
    COUNT(*) AS Total,
    Round(CONVERT(float,(COUNT(*) / @total) * 100),3) AS Percent
FROM Areas
INNER JOIN Crimes
    ON(Areas.Area = Crimes.Area)
GROUP BY
    Areas.AreaName,
    Areas.Area

标签: sqlfunctionaggregate

解决方案


PERCENT是 SQL Server 中的关键字。尝试使用其他别名,例如Pct

SELECT
    a.Area,
    a.AreaName,
    COUNT(*) AS Total,
    Round(CONVERT(float, (COUNT(*) / @total) * 100), 3) AS Pct
FROM Areas a
INNER JOIN Crimes c
    ON a.Area = c.Area
GROUP BY
    a.AreaName,
    a.Area;

请注意,我还在您的查询中引入了表别名,这使得代码不那么冗长且更易于阅读。

您也可以[Percent]在方括号中使用。但是,这会带来风险,即对您的查询进行子查询的人也必须转义此别名。因此,我更喜欢完全避免对列名和表名使用关键字。


推荐阅读