2013-04-29 3 views
1

그룹별로 제대로 작동하지 않거나 내 코드에 문제가있는 자체 조인 된 테이블에 문제가 있습니다.자체 발급 그룹에 가입 하시겠습니까?

나는 주택 판매 데이터가있는 테이블을 생성하려고하는데 결과를 지역별 및 주택 유형별로 그룹화하려고합니다.

여기까지 내가 지금까지 가지고 있으며 내가 필요한 것에 가깝습니다.

SELECT A1.AREA AREA, 
    TRUNC((A1.SOLD_PRICE/A1.ASK_PRICE*100), 2) || '%' "ATT/ROW/TWNHOUSE", 
    TRUNC((A2.SOLD_PRICE/A2.ASK_PRICE*100), 2) || '%' "DETACHED", 
    TRUNC((A3.SOLD_PRICE/A3.ASK_PRICE*100), 2) || '%' "SEMI-DETACHED" 
FROM SALESRECORDS A1, SALESRECORDS A2, SALESRECORDS A3 
WHERE A1.AREA = A2.AREA AND A1.AREA = A3.AREA 
GROUP BY A1.AREA, A1.HOUSE_TYPE; 

이 경우 오류 ORA-00979: not a GROUP BY expression이 표시됩니다. 나는 SQL 규칙에 따라, 나는 GROUP BY 절에 모든 항목을 추가 할 때

, 나는 .... 문에 의해 순서와 유사한 결과를 얻을

SELECT A1.AREA, 
    TRUNC((A1.SOLD_PRICE/A1.ASK_PRICE*100), 2) || '%' "ATT/ROW/TWNHOUSE", 
    TRUNC((A2.SOLD_PRICE/A2.ASK_PRICE*100), 2) || '%' "DETACHED", 
    TRUNC((A3.SOLD_PRICE/A3.ASK_PRICE*100), 2) || '%' "SEMI-DETACHED" 
FROM SALESRECORDS A1, SALESRECORDS A2, SALESRECORDS A3 
WHERE A1.AREA = A2.AREA AND A1.AREA = A3.AREA 
GROUP BY A1.AREA, A1.SOLD_PRICE, A1.ASK_PRICE, A2.SOLD_PRICE, A2.ASK_PRICE, 
    A3.SOLD_PRICE, A3.ASK_PRICE; 

은 누군가가 나 내가 무엇을 말할 수 틀린 일이 ....?

+0

왜 그룹별로 필요하다고 생각하십니까? 두 번째 성명에서 어떤 결과가 나옵니까? 어떤 결과를 얻고 싶습니까? – Craig

답변

0

참고 :추가 정보를 기반으로 편집되었습니다. 또한 원래의 대답에서 일치하지 않는 괄호가 고정되었습니다. 당신이 그룹에 대한 전체 비율이 필요하면 그렇게 할 수있는 유일한 안전한 방법은 총 "판매 가격"과 총 "을 계산하는 것이다

Area Att/Row/Twnhouse Detached Semi-Detached 
---- ---------------- -------- ------------- 
East 20.00%   33.33% 75.12% 
West 22.22%   44.44% 55.10% 

:

요청 된 출력은 다음과 같이 보입니다 먼저 물가에 물어 본 다음 총계에 대해 수학을하십시오. 이를 위해 모든 것을 합치는 하위 쿼리가 필요합니다. 외부 질의는 수학을 할 수 있습니다. 이 같은

시도 뭔가 :

SELECT 
    Area "Area", 
    ROUND(TownhouseSold/TownhouseAsk * 100, 2) || '%' "Att/Row/Twnhouse", 
    ROUND(DetachedSold/DetachedAsk * 100, 2) || '%' "Detached", 
    ROUND(SemiDetachedSold/SemiDetachedAsk * 100, 2) || '%' "Semi-Detached" 
FROM (
    SELECT 
    Area, 
    SUM(CASE WHEN House_Type = 'Att/Row/Twnhouse' THEN Sold_Price END) AS TownhouseSold, 
    SUM(CASE WHEN House_Type = 'Att/Row/Twnhouse' THEN Ask_Price END) AS TownhouseAsk, 
    SUM(CASE WHEN House_Type = 'Detached' THEN Sold_Price END) AS DetachedSold, 
    SUM(CASE WHEN House_Type = 'Detached' THEN Ask_Price END) AS DetachedAsk, 
    SUM(CASE WHEN House_Type = 'Semi-Detached' THEN Sold_Price END) AS SemiDetachedSold, 
    SUM(CASE WHEN House_Type = 'Semi-Detached' THEN Ask_Price END) AS SemiDetachedAsk 
    FROM SalesRecords 
    GROUP BY Area 
) 
ORDER BY Area 

부록 "영역으로의 제시 가격 이상 판매 된 주택의 비율"로 재 질문입니다.

접근법은 (a) 주택 수 및 (b) 상기 가격을 매도 한 수와 지역별로 계산하는 것입니다. 그것은 내부 쿼리입니다. 그것은 또한 집 유형에 의해 피벗합니다. 외부 쿼리는 백분율을 계산합니다. 여기에 있습니다 :

SELECT 
    Area "Area", 
    ROUND(TownhouseOverAsk/TownhouseCount * 100, 2) || '%' "Att/Row/Twnhouse", 
    ROUND(DetachedOverAsk/DetachedCount * 100, 2) || '%' "Detached", 
    ROUND(SemiDetachedOverAsk/SemiDetachedCount * 100, 2) || '%' "Semi-Detached" 
FROM (
    SELECT 
    Area, 
    SUM(CASE WHEN House_Type = 'Att/Row/Twnhouse' THEN 1 END) AS TownhouseCount, 
    SUM(CASE WHEN House_Type = 'Att/Row/Twnhouse' AND Sold_Price > Ask_Price THEN 1 END) AS TownHouseOverAsk, 
    SUM(CASE WHEN House_Type = 'Detached' THEN 1 END) AS DetachedCount, 
    SUM(CASE WHEN House_Type = 'Detached' AND Sold_Price > Ask_Price THEN 1 END) AS DetachedOverAsk, 
    SUM(CASE WHEN House_Type = 'Semi-Detached' THEN 1 END) AS SemiDetachedCount, 
    SUM(CASE WHEN House_Type = 'Semi-Detached' AND Sold_Price > Ask_Price THEN 1 END) AS SemiDetachedOverAsk, 
    FROM SalesRecords 
    GROUP BY Area 
) 
ORDER BY Area 
+0

문제는 없지만 결과를 어떻게 보이게할까요? 위의 가정이 맞지 않으면 질문을 편집하고 예상되는 결과의 예를 추가 할 수 있습니까? 또한 정말로 비율을 잘라내시겠습니까? 이와 같은 경우 일반적으로 반올림이 더 적절합니다. –

+0

죄송합니다 - 죄송합니다. 처음에는 sites.google.com 링크가 표시되지 않았습니다. 이제 알았어. 나는 빨리 살펴볼 것이다. –

+0

확인; 답변이 업데이트되었습니다. 오라클 테이블 내용 스크린 샷 ('Java Printing.pdf' 문서)을 읽을 수 없었습니다. 크기가 너무 작아서 그것을 확대하려고 시도했을 때 흐리게 보였으므로 정보를 많이 만들 수 없었습니다. 예상 결과 문서 ('the goal.jpg')는 분명했습니다. 위의 쿼리는 모든 방법이 아니라면 아주 가깝게 만듭니다. –