【问题标题】:Get AVG(Price) using 3 SQL Tables使用 3 个 SQL 表获取 AVG(Price)
【发布时间】:2014-11-13 04:16:27
【问题描述】:

我想要每个类别的平均价格,其中产品通过 Product_Category_Mapping 表按类别分组。

产品表有 ID 和价格列,我想要每个类别的所有产品的平均价格。

Product Table: 
ID, 
Name, 
Price

Category Table: 
ID, 
Name

Product_Category_Mapping Table: 
ID, 
CategoryID, 
ProductID

有什么想法吗??

【问题讨论】:

  • 有什么原因你没有尝试过吗?
  • 是的,为什么不努力编写自己的查询,然后询问您的查询缺少什么或问题
  • 哇 ... 很好的 cmets Edrich,是的 - 我确实做了几次尝试,但他们没有奏效,将它们添加到问题中只会使水变得混乱 - 很好,真的很好的评论等等有帮助

标签: sql-server join average


【解决方案1】:

你只需要了解sqlserver中的join。这里我们使用 innerjoin 来表示一对一的关系。

declare @Category Table(ID int, Name varchar(50))
declare @Product Table(ID int, Name varchar(50), Price int)

declare @Product_Category_Mapping Table (ID int, CategoryID int, ProductID int)

insert into @Category values (1,'a'),(2,'b'),(3,'c')
insert into @Product values (1,'p1',10),(2,'p2',20),(3,'p3',30)
insert into @Product_Category_Mapping values (1,1,1),(2,1,2),(3,2,3)

select 
    c.id, avg(price)
from @Product_Category_Mapping pcm 
    inner join @Product p on p.id = pcm.ProductID
    inner join @Category c on c.id = pcm.CategoryID

group by c.id

更新

作为您的评论,我理解并更新如下代码。有问题请告诉我。

declare @Product Table(ID int, Name varchar(50), Price int)

declare @Product_Category_Mapping Table (ID int, CategoryID int, ProductID int)

insert into @Category values (1,'a'),(2,'b'),(3,'c')
insert into @Product values (1,'p1',10),(2,'p2',20),(3,'p3',30)
insert into @Product_Category_Mapping values (1,1,1),(2,1,2),(3,2,3)

select --Category.[name] as CatName, Product.[Id], Product.[Name], [Price] 
    c.id, 
    c.Name,
    p.ID,
    p.Name,
    avg(isnull(price,0)) over(partition by c.id ) as avgprice
from @Category c    
    left join @Product_Category_Mapping pcm  on c.id = pcm.CategoryID
    left join @Product p on p.id = pcm.ProductID

【讨论】:

  • 我试过了,但不知道为什么它没有绑定:SELECT Category.[name] as CatName, Product.[Id], Product.[Name], [Price] FROM [Category]在 map.CategoryId = Category.id 上加入 Product_Category_Mapping 作为地图。在 map.ProductID = Product.[Id] 上加入产品作为 Prod .....感谢您的回复和样品!
  • 它不是绑定方式。你面临的问题是什么。我检查了你的代码。为什么要在查询中介绍产品部分。您需要类别平均价格,那么产品是如何来的,或者只是想以平均类别价格显示所有产品?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 2013-03-18
  • 2018-06-06
  • 1970-01-01
相关资源
最近更新 更多