SQL两个表上的聚合函数

时间:2013-12-08 17:54:31

标签: sql

我正在做一个数据库项目,我花了大约3个小时让自己感到困惑,所以我想我会尝试在这里得到一些帮助。

我有音乐类型,比赛和比赛参赛表。 我需要弄清楚每种类型的竞赛数量以及每种类型的参赛作品数量。 当我在查询中只有一个时,我的竞赛和条目的聚合函数工作,但是当我在同一个查询中都有它们时,我也得到了竞赛中条目列的结果,我不知道我做错了什么,这可能是一件愚蠢而简单的事。

这是我的疑问:

SELECT Genre.Genre, count(Competition.Genre_ID)Competitions, count(Comp_Entry.Comp_ID)Bands
FROM Genre, Competition, Comp_Entry
WHERE Genre.Genre_ID = Competition.Genre_ID
AND Comp_Entry.Comp_ID = Competition.Comp_ID
GROUP BY Competition.Genre_ID, Genre.Genre
ORDER BY Genre.Genre;

谁能看到我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

您应该使用正确的join语法。但您遇到的问题是您需要count(distinct)而不是count()

SELECT Genre.Genre, count(Competition.Genre_ID) as Competitions,
       count(distinct Comp_Entry.Comp_ID) as Bands
FROM Genre join
     Competition
     on Genre.Genre_ID = Competition.Genre_ID join
     Comp_Entry
     on Comp_Entry.Comp_ID = Competition.Comp_ID
GROUP BY Competition.Genre_ID, Genre.Genre
ORDER BY Genre.Genre;