sql - varchar MS SQL server 中的平均字符数
问题描述
我目前正在尝试从标记为 job_notes 的表中选择多个列,包括 note_id、notes_date_time、comments、DATALENGTH(comments) 作为“note_length”。
但是,我只打算在评论中的字符长度大于其他评论的平均长度时显示上述内容。(注释的数据类型是 VARCHAR 东西)。
我还打算按评论的长度降序排列。
这是我的代码:
SELECT note_id, notes_date_time, comments, DATALENGTH(comments) AS 'note_length'
FROM job_notes
WHERE DATALENGTH(comments) > AVG(DATALENGTH(comments))
ORDER BY DATALENGTH(comments) DESC;
执行后,我遇到以下错误消息
聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。
任何帮助将不胜感激。谢谢!
解决方案
如错误所述,您不能在 中使用聚合函数WHERE
,并且 在HAVING
这里也无济于事。就个人而言,我建议使用 CTE 和 Windowed Aggregate 函数:
WITH CTE AS
(SELECT note_id,
notes_date_time,
comments,
DATALENGTH(comments) AS Note_Length, --Don't use single quotes for aliases, they are meant for literal strings
AVG(DATALENGTH(comments)) OVER () AS Avg_Note_Length
FROM dbo.job_notes)
SELECT note_id,
notes_date_time,
comments,
Note_Length --Don't forget to divide by 2 if you want characters and this is an nvarchar
FROM CTE
WHERE Note_Length > Avg_Note_Length;
推荐阅读
- postgresql - 如何在 timestampz 列中插入 UTC 值
- c# - 查询不更新表
- ruby-on-rails - 在 Rails 控制器中处理选项
- python - Python 中 Azure Functions 上的文件操作
- java - 无法在 Android recyclerview 中使用 Picasso 从 Firestore 加载图像
- ios - 如何缩放和居中 UIBezierPath?
- word2vec - 使用 Fast-text 从同义词集中查找同义词
- java - Java 日历时区
- .net - MathNet.Numerics.LinearAlgebra 库可以在 Visual Studio 2019 中使用吗?
- apache-spark - 火花非确定性和重新计算安全