原谅标题血腥。我很难找到一个表达问题的好方法,这个问题是特有的。
季节
id name
---- ------
1 Season 1
2 Season 2
3 Season 3
插曲
id season_id number title
---- ----------- -------- ---------------------------------------
1 1 1 Pilot
2 1 2 1x02 - We Got Picked Up
3 1 3 1x03 - This is the Third Episode
4 2 1 2x01 - We didn't get cancelled.
5 2 2 2x02 - We're running out of ideas!
6 3 1 3x01 - We're still here.
7 3 2 3x02 - Okay, this game show is dying.
8 3 3 3x03 - Untitled
评分
id episode_id score contestant_id (table not given)
---- ------------ ------- ---------------------------------
1 1 35 1
2 1 -12 2
3 1 8 3
4 1 5 4
5 2 13 1
6 2 -2 5
7 2 3 3
8 2 -14 6
9 3 -14.5 1
10 3 -3 2
11 3 1.5 7
12 3 9.5 5
13 4 22.8 1
14 4 -3 8
15 5 2 1
16 5 13.5 9
17 5 7 3
18 6 13 1
19 6 -84 10
20 6 12 11
21 7 3 1
22 7 10 2
23 8 29 1
24 8 1 5
如您所见,每季有多集,每集多个分数(每位参赛者一个分数)。参赛者可以在以后的剧集中重新出现(不相关),分数是浮点值,每集可以有任意数量的分数。
我想获得每个季节的平均总发作得分,其中总发作得分是一集中所有得分的总和。在数学上,这是一个季节中所有乐谱的总和除以剧集的数量。很容易理解,但我在一次查询中遇到麻烦并获得正确的结果。我喜欢以下输出:
name average_total_episode_score
---------- -----------------------------
Season 1 9.83
Season 2 21.15
Season 3 -5.33
顶级查询需要位于 season
表中,因为它将与同一个表上的其他类似查询结合使用。使用子查询中的聚合来执行此操作非常容易,但聚合会执行子查询,从而无法满足我的单一查询要求。这可以在一个查询中完成吗?
答案 0 :(得分:0)
希望这应该有用
Select s.id, avg(score)
FROM Season S,
Episode e,
Score sc
WHERE s.id = e.season_id
AND e.id = sc.episode_id
Group by s.id
答案 1 :(得分:0)
好的,只是搞清楚了。像往常一样,在简单的解决方案落到我身上之前,我不得不写一本完整的书。
我的查询中的问题(我没有在问题中给出)是缺少DISTINCT
计数。这是一个有效的查询:
SELECT
"season"."id",
"season"."name",
(SUM("score"."score") / COUNT(DISTINCT "episode"."id")) AS "average_total_episode_score"
FROM "season"
LEFT OUTER JOIN "episode"
ON ("season"."id" = "episode"."season_id")
LEFT OUTER JOIN "score"
ON ("episode"."id" = "score"."episode_id")
GROUP BY "season"."id"
答案 2 :(得分:-1)
选择Se.id AS Season_Id,sum(得分)作为season_score,来自得分S的avg(得分)加入情节E ON S.episode_id = E.id 通过se.id
加入季节se on se.id = e.season_id group