【问题标题】:Finding average of numbers against the ID in SQL Server在 SQL Server 中根据 ID 查找数字的平均值
【发布时间】:2020-04-16 08:16:59
【问题描述】:

假设有两个表,CustomerLimit

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

【问题讨论】:

  • 您能在sqlfiddle.com 上提供一个沙箱进行测试吗?
  • @Blag 抱歉,我是新手,从未使用过 sqlfiddle。
  • @blag 哦,所以我们只需要添加 group by 子句。
  • 是的,您需要具体说明数据库应该如何工作,所以如果您不尝试使 AVG 完整,您告诉它“通过分组”来获取平均值表。
  • @Blag 愚蠢的我忘了添加 avg 功能。你的查询很完美。将其标记为答案。

标签: sql sql-server average


【解决方案1】:

group by b.CustomerId

这个,不是吗?

您需要具体说明数据库应该如何工作,所以您告诉它 如果您不尝试使数据库生成平均值,则“通过分组” 满桌的 AVG

SQL Fiddle

MS SQL Server 2017 架构设置

Results

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

Results

| 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

Results

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多