You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server的GROUP BY子句中除YEAR()外还可使用哪些非聚合函数?

SQL Server GROUP BY子句可使用的函数范围说明

SQL Server的GROUP BY子句中除YEAR()之外,确实可以使用多种非聚合类函数,仅禁止使用聚合函数(如COUNT()、SUM()、AVG()等)。只要函数是基于当前行计算、返回确定性的标量值,都可以在GROUP BY中使用,常见可用函数类型如下:

  • 日期时间处理类:除YEAR()外,还支持MONTH()、DAY()、DATETRUNC()、DATEPART()、DATEDIFF()等。比如需要按订单季度分组时,可写为GROUP BY DATEPART(QUARTER, OrderDate)
  • 字符串处理类:支持LEFT()、RIGHT()、SUBSTRING()、UPPER()、LOWER()、LEN()等。比如需要按用户邮箱域名分组时,可写为GROUP BY RIGHT(Email, LEN(Email)-CHARINDEX('@', Email))
  • 数值计算类:支持ROUND()、FLOOR()、CEILING()、ABS()等。比如需要按订单金额整数区间分组时,可写为GROUP BY FLOOR(OrderAmount)
  • 类型转换类:支持CAST()、CONVERT()、TRY_CAST()等。比如需要按订单年月分组时,可写为GROUP BY CONVERT(VARCHAR(7), OrderDate, 120)

注意:GROUP BY子句中使用的函数表达式,必须和SELECT子句中对应的非聚合字段完全一致。比如你给出的示例中SELECT写了year(orderDate) as year,GROUP BY也要写Year(OrderDate),不能直接用别名,也不能写其他不等价的表达式。

你也可以参考以下扩展使用示例:

-- 按订单所属月份、订单金额区间统计订单数量
SELECT 
    CONVERT(VARCHAR(7), OrderDate, 120) AS order_month,
    FLOOR(OrderAmount) AS amount_segment,
    COUNT(OrderId) AS quantity
FROM Orders
GROUP BY CONVERT(VARCHAR(7), OrderDate, 120), FLOOR(OrderAmount)
ORDER BY order_month, amount_segment

内容的提问来源于stack exchange,提问作者RecipeMaker1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:24:03