sql - 使用聚合函数在 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
解决方案
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]
在方括号中使用。但是,这会带来风险,即对您的查询进行子查询的人也必须转义此别名。因此,我更喜欢完全避免对列名和表名使用关键字。
推荐阅读
- java - 如何在 Java 1.6 中将 UTC 日期转换为本地日期
- angular - PrimeNG TurboTable 排序图标在启用默认排序的情况下不可见
- architecture - DAO 层应该如何实现?一张表 DAO 还是多表 DAO?
- vhdl - VHDL为信号名称分配一个数字
- java - 关闭桌面/本机窗口的Java代码?
- c++ - 在模板实例化中包括和排除类型
- asynchronous - 谁负责协程的暂停和继续?
- c - 了解 Linux 中的 RS-485
- javascript - 如何基于字符串创建 Firestore 安全文档 ID
- ios - AppsFlyer 的 SDK 收据验证失败