2017-10-15 60 views
0

當我試圖將兩個子查詢連接在一起時,第一個查詢中的值改變了。任何想法爲什麼?謝謝!使用oracle時加入兩個子查詢一起改變了第一個查詢的內容

這裏是代碼:

SELECT * 
FROM ((

    SELECT HOME, VISITOR, COUNT("result") AS HGOALS 
    FROM(
     SELECT HOME, VISITOR, "result" 
     FROM ENGLAND 
     WHERE TIER = 1 AND "SEASON" >= 1980 AND "result" = 'H' 
     ) 
    GROUP BY HOME, VISITOR 
    ORDER BY HGOALS DESC) 
      JOIN 
    (SELECT HOME, VISITOR, COUNT("result") AS AGOALS 
    FROM(
     SELECT HOME, VISITOR, "result" 
     FROM ENGLAND 
     WHERE TIER = 1 AND "SEASON" > 1980 AND "result" = 'A' 
     ) 
    GROUP BY HOME, VISITOR) USING (VISITOR, HOME)) 
    ORDER BY AGOALS DESC; 

輸出的部分是

 Manchester United Aston Villa 5 18 
    Arsenal West Ham United 5 17 
    Arsenal Aston Villa 6 17 
    Manchester United Everton 12 16 
    Liverpool Aston Villa 8 16 

但是當我僅執行JOIN的第一部分,這是

 SELECT HOME, VISITOR, COUNT("result") AS HGOALS 
    FROM(
     SELECT HOME, VISITOR, "result" 
     FROM ENGLAND 
     WHERE TIER = 1 AND "SEASON" >= 1980 AND "result" = 'H' 
     ) 
    GROUP BY HOME, VISITOR 
    ORDER BY HGOALS DESC 

部分的結果是:

 Manchester United Tottenham Hotspur 27 
    Arsenal Everton 26 
    Manchester United Aston Villa 26 
    Liverpool Tottenham Hotspur 25 
    Manchester United West Ham United 24 

注意,對於

 Manchester United Aston Villa 5 18 
    Manchester United Aston Villa 26 

結果我應該得到的是26,但它改爲5時,我加入兩個子查詢在一起。 爲什麼?

+0

謝謝Ella Guan。我沒有看到爲什麼第一個子查詢中的count可以通過加入第二個來改變,因爲每個count都在join之前執行內聯。如果可能的話,你可以發佈支持數據(曼聯在主場vs阿斯頓維拉)?你也可以運行下面的變體查詢,讓我知道這場比賽的結果? (選擇主頁,訪問者,計數(DECODE(結果,'H',結果,NULL))作爲HOGOALS,COUNT(DECODE(結果,'A',結果,NULL))作爲英格蘭的地址,等級= 1和季節> = 1980年的GROUP BY VISITOR,HOME;'爲什麼> = 1980爲'H',但> 1980爲'A'? – alexgibbs

+0

抱歉,備份數據太長而無法放入評論框。基本上,曼徹斯特有26次擊敗阿斯頓維拉成爲主隊。我運行這個:SELECT HOME,VISITOR,COUNT(DECODE(「result」,'H','result',NULL))HGOALS,COUNT(DECODE(「result」,'A','result',NULL) )作爲來自英格蘭的地區,其中等級= 1和季節> = 1980和HOME ='曼聯'和遊客='阿斯頓維拉'GROUP BY拜訪者,主頁;結果是:曼聯\t阿斯頓維拉 2.實際上我不知道爲什麼,但我只能得到與給定答案相匹配的結果,當我在1980年爲'A'不是> = 1980時。 –

回答

0

我的查詢太複雜了。這不是你想要的嗎?

SELECT HOME, VISITOR, 
     SUM(CASE WHEN result = 'H' THEN 1 ELSE 0 END) as HGOALS, 
     SUM(CASE WHEN result = 'A' THEN 1 ELSE 0 END) as AGOALS 
FROM ENGLAND 
WHERE TIER = 1 AND SEASON >= 1980 
GROUP BY HOME, VISITOR 
ORDER BY AGOALS DESC; 

注意:根據列的定義方式,您可能需要引號result

+0

謝謝!我試過你的查詢,但我仍然在HGOALS上得到「5」但不是「26」。 –

+0

我懷疑這個問題是對數據的誤解。顯然,原始查詢中的「加入」不是問題。 –

+0

我會仔細檢查一下。謝謝! –

相關問題