在SQL Server中根据ID查找数字的平均值

在SQL Server中根据ID查找数字的平均值,sql,sql-server,average,Sql,Sql Server,Average,假设有两个表,Customer和Limit Customer具有以下列: CustomerId (PK) Name 而Limit有以下列: LimitId (PK) Limitvalue CustomerId (FK) 这是我的示例数据: 客户 CustomerId Name ---------------------- 1 xyz 2 abc 3 uio 限制 LimitValue CustomerId

假设有两个表,
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。如您所见,一个customerid有多个限制值。我想写一个查询,显示所有限制值相对于其特定Id的平均值


我尝试添加avg函数。这里的左连接应该起作用,但不起作用。有谁能帮我生成一些类似的示例数据并编写查询,以便我理解这个概念?我真的很感激。

b.CustomerId集团

这个,不是吗

您需要具体说明数据库应该如何工作,所以您告诉了它 如果数据库没有尝试进行分组,则“通过分组”进行平均 全表平均值

MS SQL Server 2017架构设置

| CustomerId | Name |
|------------|------|
|          1 |  bob |
|          2 | jean |
| LimitId | Limitvalue | CustomerId |
|---------|------------|------------|
|       1 |          0 |          1 |
|       2 |         10 |          1 |
|       3 |        100 |          2 |
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 |

| CustomerId | Name |
|------------|------|
|          1 |  bob |
|          2 | jean |
| LimitId | Limitvalue | CustomerId |
|---------|------------|------------|
|       1 |          0 |          1 |
|       2 |         10 |          1 |
|       3 |        100 |          2 |
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 |

| CustomerId | Name |
|------------|------|
|          1 |  bob |
|          2 | jean |
| LimitId | Limitvalue | CustomerId |
|---------|------------|------------|
|       1 |          0 |          1 |
|       2 |         10 |          1 |
|       3 |        100 |          2 |
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 |
查询3

| CustomerId | Name |
|------------|------|
|          1 |  bob |
|          2 | jean |
| LimitId | Limitvalue | CustomerId |
|---------|------------|------------|
|       1 |          0 |          1 |
|       2 |         10 |          1 |
|       3 |        100 |          2 |
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 |

| CustomerId | Name |
|------------|------|
|          1 |  bob |
|          2 | jean |
| LimitId | Limitvalue | CustomerId |
|---------|------------|------------|
|       1 |          0 |          1 |
|       2 |         10 |          1 |
|       3 |        100 |          2 |
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 |

你能为测试提供一个沙箱吗?@Blag抱歉,我是新手,从未使用过sqlfiddle。@Blag哦,所以我们只需要添加group by子句。是的,你需要具体说明数据库应该如何工作,所以你告诉它“通过分组”来获得平均值如果你不想让数据库在满表上做平均值。@布拉格愚蠢的我忘了添加平均值函数。你的问题很完美。把它标记为答案。