我有一个表,其中除了一列外,有些行是相同的。我想按相同的行分组并取单列的平均值。
例如我有一张 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/