首页 > 解决方案 > 在 SQL Server 中根据 ID 查找数字的平均值

问题描述

假设有两个表,Customer并且Limit

Customer具有以下列:

CustomerId (PK)
Name

Limit有这些列:

LimitId (PK)
Limitvalue
CustomerId (FK)

这是我的示例数据:

顾客

CustomerId    Name
----------------------
    1         xyz
    2         abc
    3         uio

限制

LimitValue     CustomerId
-------------------------
  35303000         1
         0         1
         3         1
         0         2
 225140000         2
         3         2

现在当我运行这个查询

select a.Limitvalue, b.CustomerId 
from limit a
left join Customer b on a.CustomerId = b.CustomerId

它将返回如下数据:

数据

这里第一列是限制值,第二列是 customerid。如您所见,一个客户 ID 有多个限制值。我想编写一个查询,向我显示所有限制值与其特定 ID 的平均值。

我尝试添加 avg 函数。这里的左连接应该可以完成工作,但它不起作用。任何人都可以通过生成一些与此类似的示例数据并编写其查询来帮助我,以便我理解这个概念吗?我会很感激的。

标签: sqlsql-serveraverage

解决方案


group by b.CustomerId

这,不是吗?

你需要具体说明数据库应该如何工作,所以你告诉它“通过分组”来计算平均值,如果你不尝试在整个表上创建 AVG

SQL小提琴

MS SQL Server 2017 架构设置

结果

| CustomerId | Name |
|------------|------|
|          1 |  bob |
|          2 | jean |

结果

| LimitId | Limitvalue | CustomerId |
|---------|------------|------------|
|       1 |          0 |          1 |
|       2 |         10 |          1 |
|       3 |        100 |          2 |

查询 3

select 
  avg(a.Limitvalue),
  b.CustomerId 
from limit a
left join Customer b 
  on a.CustomerId= b.CustomerId
group by b.CustomerId

结果

|     | CustomerId |
|-----|------------|
|   5 |          1 |
| 100 |          2 |

推荐阅读