在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子句。是的,你需要具体说明数据库应该如何工作,所以你告诉它“通过分组”来获得平均值如果你不想让数据库在满表上做平均值。@布拉格愚蠢的我忘了添加平均值函数。你的问题很完美。把它标记为答案。