问候Stackoverflow的仁慈之神,
我目前正在努力获得一个空间启用的查询,以便为我正在进行的SQL任务工作。措辞如下:
SELECT PURCHASES.TotalPrice, STORES.GeoLocation, STORES.StoreName
FROM MuffinShop
join (SELECT SUM(PURCHASES.TotalPrice) AS StoreProfit, STORES.StoreName
FROM PURCHASES INNER JOIN STORES ON PURCHASES.StoreID = STORES.StoreID
GROUP BY STORES.StoreName
HAVING (SUM(PURCHASES.TotalPrice) > 600))
我正在尝试使用此查询执行函数查询(如avg,sum等)并获取空间信息。另一个例子是:
SELECT STORES.StoreName, AVG(REVIEWS.Rating),Stores.Shape
FROM REVIEWS CROSS JOIN
STORES
GROUP BY STORES.StoreName;
这会返回Column 'STORES.Shape' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
错误消息。
我知道我需要一个子查询来执行此任务,我只是无法让它工作。任何帮助都会受到高度赞赏。
答案 0 :(得分:0)
这个问题有两个部分,我将用以下逻辑解决第一个问题:
考虑到这一点,您需要使用STORES
表作为基础,然后通过子查询或应用将利润固定在其上:
SELECT s.StoreName
,s.GeoLocation
,p.StoreProfit
FROM STORES s
INNER JOIN (
SELECT pu.StoreId
,StoreProfit = SUM(pu.TotalPrice)
FROM PURCHASES pu
GROUP BY pu.StoreID
) p
ON p.StoreID = s.StoreID;
这个效率更高一点:
SELECT s.StoreName
,s.GeoLocation
,profit.StoreProfit
FROM STORES s
CROSS APPLY (
SELECT StoreProfit = SUM(p.TotalPrice)
FROM PURCHASES p
WHERE p.StoreID = s.StoreID
GROUP BY p.StoreID
) profit;
现在对于第二部分,您收到的错误告诉您,除了您的聚合函数之外,您需要在select语句中GROUP BY
所有列。
在第二个示例中,您要求SQL根据ID对每个商店进行平均评级,但您也尝试返回另一列而不将其包含在分组中。我将尝试通过以下示例向您展示您要求SQL执行的操作以及问题所在:
-- Data
Id | Rating | Shape
1 | 1 | Triangle
1 | 4 | Triangle
1 | 1 | Square
2 | 1 | Triangle
2 | 5 | Triangle
2 | 3 | Square
SQL Server,请给我每家商店的平均评分:
SELECT Id, AVG(Rating)
FROM Store
GROUP BY StoreId;
-- Result
Id | Avg(Rating)
1 | 2
2 | 3
SQL Server,请给我每个商店的平均评分,并在结果中显示其形状(但不要由它组成):
SELECT Id, AVG(Rating), Shape
FROM Store
GROUP BY StoreId;
-- Result
Id | Avg(Rating) | Shape
1 | 2 | Do I show Triangle or Square ...... ERROR!!!!
2 | 3 |
需要告诉我们获得每个商店的平均值和形状:
SELECT Id, AVG(Rating), Shape
FROM Store
GROUP BY StoreId, Shape;
-- Result
Id | Avg(Rating) | Shape
1 | 2.5 | Triangle
1 | 1 | Square
2 | 3 | Triangle
2 | 3 | Square
答案 1 :(得分:0)
在任何空间查询中,您都需要了解最终的几何形状。看起来您正在尝试按单个商店分组,但是从子查询中提供平均评分。因此,如果我没看错,您只是在寻找与平均评分相关的商店形状信息?
在stores表中查询shape字段,并加入用于获得平均评分的查询
select a.shape
b.*
from stores a inner join (your Average rating query with group by here) b
on a.StoreID = b.Storeid