SQL聚合函数

compute的用法

按经行sum( bill_no )汇总:

SELECT *
FROM maintain_material
ORDER BY bill_no
COMPUTE SUM(addamt)by bill_no

只有一个汇总行,同时对数据经行排序:

SELECT *
FROM maintain_material
ORDER BY bill_no
COMPUTE SUM(addamt)

只有一个汇总行,不对数据经行排序:

SELECT *
FROM maintain_material
COMPUTE SUM(addamt)

下面的代码是不正确的:

SELECT *
FROM maintain_material
COMPUTE SUM(addamt)by bill_no

      在排序依据列表中没有找到 COMPUTE BY 子句中的某一项。计算依据列表中的所有表达式也必须同时出现在排序依据列表中。

下面的代码也是不正确的,comput中只能是单个列:

SELECT *
FROM maintain_material
order by bill_no
compute sum(addamt - cost) by bill_no

SELECT *   FROM maintain_material aaa
order by bill_no
compute sum(addamt ) by bill_no ,sum(cost ) by bill_no --不能有两列

   在使用聚合函数时,select中的其他非聚合字段,一定要出现在group by子句中:

SELECT bill_no as 单据编号 ,sum(cost) as 成本金额, price
FROM maintain_material
group by bill_no
       列 'maintain_material.price' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。select子句中的字段要么在聚合函数中,要么在group by 子句中

下面的语句是正确的:

SELECT bill_no as 单据编号 ,sum(cost) as 成本金额     FROM maintain_material
group by bill_no

SELECT sum(cost) as 成本金额 ,sum(addamt - cost) as 利润
FROM maintain_material

### SQL 聚合函数使用指南及示例 SQL 聚合函数是用于对一组值执行计算并返回单一值的工具。常见的聚合函数包括 `SUM`、`COUNT`、`AVG`、`MAX` 和 `MIN` 等,这些函数在数据分析和业务需求中扮演着重要角色[^1]。 以下是一些常用的 SQL 聚合函数及其示例: #### 1. `SUM` 函数 `SUM` 函数用于计算某一列所有值的总和。 ```sql SELECT SUM(salary) AS total_salary FROM employees; ``` 该查询将返回 `employees` 表中所有员工薪资的总和[^1]。 #### 2. `COUNT` 函数 `COUNT` 函数用于统计某一列中非空值的数量。 ```sql SELECT COUNT(*) AS employee_count FROM employees; ``` 此查询将返回 `employees` 表中的行数,即员工总数。 #### 3. `AVG` 函数 `AVG` 函数用于计算某一列所有值的平均值。 ```sql SELECT AVG(age) AS average_age FROM employees; ``` 此查询将返回 `employees` 表中员工年龄的平均值。 #### 4. `MAX` 和 `MIN` 函数 `MAX` 和 `MIN` 函数分别用于获取某一列的最大值和最小值。 ```sql SELECT MAX(salary) AS highest_salary, MIN(salary) AS lowest_salary FROM employees; ``` 此查询将返回 `employees` 表中最高和最低薪资的值[^1]。 #### 5. 自定义聚合函数 在某些情况下,内置的聚合函数可能无法满足特定的业务需求。SQL Server 提供了创建自定义聚合函数的能力,允许开发者根据自己的需求扩展数据库功能。例如,可以创建一个自定义聚合函数来计算加权平均值或中位数。 以下是一个简单的自定义聚合函数实现示例(以 C# 为例): ```csharp using System; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; [Serializable] [SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize = 8000)] public class WeightedAverage : IBinarySerialize { private double sumWeights; private double weightedSum; public void Init() { sumWeights = 0; weightedSum = 0; } public void Accumulate(SqlDouble value, SqlDouble weight) { if (!value.IsNull && !weight.IsNull) { sumWeights += (double)weight; weightedSum += (double)value * (double)weight; } } public void Merge(WeightedAverage other) { sumWeights += other.sumWeights; weightedSum += other.weightedSum; } public SqlDouble Terminate() { return sumWeights == 0 ? SqlDouble.Null : new SqlDouble(weightedSum / sumWeights); } // 实现 IBinarySerialize 接口的方法 public void Read(BinaryReader r) { sumWeights = r.ReadDouble(); weightedSum = r.ReadDouble(); } public void Write(BinaryWriter w) { w.Write(sumWeights); w.Write(weightedSum); } } ``` 此代码定义了一个计算加权平均值的自定义聚合函数。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值