sql - 在 SQL Server 中按多列分组

标签 sql sql-server

我有一个表,其中除了一列外,有些行是相同的。我想按相同的行分组并取单列的平均值。

例如我有一张 table :

A   B   C   D
-------------
a   b   c   2
a   b   c   2
a   b   c   5
d   e   f   8
d   e   f   10

期望的结果:

A   B   C   D
-------------
a   b   c   3
d   e   f   9

我可以通过以下方式轻松做到这一点:

SELECT A, B, C, AVG(D)
FROM [table] 
GROUP BY A, B, C

我的问题是我有很多列,手动将每一列键入 GROUP BY 很麻烦。例如,我想这样做但不可能:

SELECT (* but not D), AVG(D)
FROM [table] 
GROUP BY (* but not D)

这两个问题是我不知道如何形成排除 D 的通配符,而且 GROUP BY 似乎不适用于通配符。

执行此操作的优雅方法是什么?

顺便说一句,原始表是由匹配非唯一值的左连接生成的。

最佳答案

不幸的是,没有一种神奇的方法可以做到这一点,但是使用 SSMS 可以使它变得更容易:

  • 右键单击表格
  • 脚本表为 ->
  • 选择 ->
  • 新查询窗口

这为您提供了一个格式化的 SELECT 列表,您可以从中删除聚合列并复制粘贴到您的 GROUP BY。这至少比从头开始要好一点。

关于sql - 在 SQL Server 中按多列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48831260/

相关文章:

mysql - MySQL 查询中的字符串搜索

Mysql - 左连接所有表

sql-server - 如何在 SQL Server 2008 中获取重复 ID 序列中的下一个日期

SQL TOP 5000 比结果行数少于 5000 的普通查询快?

sql - 如何识别重叠的数字范围?

sql - psql:案例用法

sql - BCP 不复制所有行

mysql - 仅当新记录为新记录时才计算给定日期的新记录数

SQL Server 相当于 MySQL 的 USING

sql-server - vs shell 安装失败,退出代码为 1638