2017-11-12 6 views
0

인사 유래의 자비로운 신,SQL 공간 하위 쿼리 문제

나는 현재 내가 일하고는 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)) 

은 내가이 쿼리와 함께 할 시도하고 (등 같은 평균, 합계) 함수 쿼리를 수행하고 다시뿐만 아니라 공간 정보를 얻을 수 있습니다. 또 다른 예는 다음과 같습니다.

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. 오류 메시지를 반환합니다.

이 작업을 수행하기 위해 하위 쿼리가 필요하다는 것을 알고 있습니다. 나는 그 작업을 끝내는 데 어려움을 겪고 있습니다. 어떤 도움이라도 크게 환영받을 것입니다.

+1

달성하려는 작업은 무엇입니까? 방금 귀하의 시도를 게시했습니다 ... – AndreasT

+0

귀하의 질의 또한 조작 된 것으로, 머핀 샵은 실제로 어떤 것에도 참여하지 않습니다 ... – twoleggedhorse

+0

시간을내어 지적 해 주셔서 감사합니다. 가입 문제는 실수입니다. 내가 성취하려고 노력하는 것은 함수 쿼리 (합계, 평균, 수 등)를 통합하고 공간 구성 요소를 반환하도록 가져 오는 것입니다.또 다른 예는 다음과 같습니다. SELECT STORES.StoreName, AVG (REVIEWS.Rating), Stores.Shape 크로스 조인에서 스토어에서 GROUP BY STORES.StoreName; – SerbSuperb

답변

0

이 질문에 두 부분이있다, 나는 다음과 같은 논리로 첫 번째 문제를 해결합니다 :

  1. 목록의 모든 상점 이름과 해당 geolocations는
  2. 각 점포
의 이익을 가져 오기

: 염두에두고

, 당신은 다음 하위 쿼리를 통해 상 이익 볼트 또는 적용, 기지로 STORES 테이블을 사용할 필요가

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; 
두 번째 부분에 대한 지금

받고있는 오류는 GROUP BY에 select 문에서 모든 열이 필요하다는 것을 알려줍니다 :

이 사람은 좀 더 효율적입니다 집계 함수 (들)의 예외.

두 번째 예에서는 ID를 기반으로 각 저장소에 대한 평균 등급을 취하도록 SQL을 요청했지만 그 안에 그룹을 포함하지 않고 다른 열을 반환하려고합니다.

SELECT Id, AVG(Rating) 
FROM Store 
GROUP BY StoreId; 

-- Result 
Id | Avg(Rating) 
1 | 2 
2 | 3 

:

-- Data 
Id | Rating | Shape 
1 | 1  | Triangle 
1 | 4  | Triangle 
1 | 1  | Square 
2 | 1  | Triangle 
2 | 5  | Triangle 
2 | 3  | Square 

SQL 서버, 나에게 각 점포의 평균 평점을주세요 : 나는 당신이하고 문제가 다음 예에 자리하고있는 곳 SQL을 요구하고 무엇을 보여주기 위해 노력할 것입니다 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