【发布时间】:2017-10-15 21:03:10
【问题描述】:
当我尝试将两个子查询连接在一起时,第一个查询中的值发生了变化。知道为什么吗?谢谢!
代码如下:
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。 为什么?
【问题讨论】:
-
感谢 Ella Guan。我不明白为什么第一个子查询中的
count可以通过加入第二个子查询来改变,因为每个count在join之前内联执行。如果可能,您能否发布支持数据(曼联主场对阵阿斯顿维拉)?您还可以运行以下变体查询并让我知道这场比赛的结果吗?SELECT HOME, VISITOR, COUNT(DECODE(RESULT,'H',RESULT,NULL)) AS HGOALS, COUNT(DECODE(RESULT,'A',RESULT,NULL)) AS AGOALS FROM ENGLAND WHERE TIER = 1 AND SEASON >= 1980 GROUP BY VISITOR, HOME;还有为什么'H' >= 1980 而'A' >= 1980? -
抱歉后台数据太长,无法放入评论区。基本上有26次曼彻斯特队作为主队击败阿斯顿维拉队。我运行这个: SELECT HOME,VISITOR,COUNT(DECODE("result",'H',"result",NULL)) AS HGOALS, COUNT(DECODE("result",'A',"result",NULL) ) 作为来自英格兰的进球,其中 TIER = 1 且赛季 >= 1980 且主场 = 'Manchester United' 且访客 = 'Aston Villa' GROUP BY by VISITOR, HOME;结果是:曼联阿斯顿维拉 26 2。实际上我不知道为什么,但是当我将 > 1980 用于 'A' 而不是 >= 1980 时,我只能得到与给定答案相匹配的结果。