SQL查询多次显示元素

时间:2011-02-21 11:43:06

标签: sql

我有以下SQL查询,但它并不完全有效,因为它会多次显示每个元素。

select c.name, c.director, c.title, count(c.title) as numfilms
from casting c
join casting c1 on c1.name = c.name
Group by c.name, c.director, c.title
Having count (c.title) > 1
order by numfilms

所以它的作用表明哪些演员制作了超过1部电影。但不幸的是,这个查询显示每个演员的次数与他制作的电影数量相同。使用不同的作为演员的作品可能已经在不同的电影中具有相同的标题和不同的导演。

2 个答案:

答案 0 :(得分:4)

select c.name, count(c.title) as numfilms
from casting c
Group by c.name
Having count (c.title) > 1
order by numfilms

如果您只是在寻找演员姓名和他们所在的电影数量,您可以从分组中删除标题和导演并选择。

编辑:从阅读下面的评论中澄清问题,理查德的第一个问题应该是正确的解决方案。

答案 1 :(得分:1)

这个问题没有意义 - 回归自身的结合是令人困惑的部分 - 除非你需要如下所示的完整记录,否则完全没有必要。

select c1.name, c1.director, c1.title, numfilms
from
(
    select c.name, count(c.title) as numfilms
    from casting c 
    Group by c.name
    Having count (c.title) > 1
) c
join casting c1 on c1.name = c.name
order by c1.name

此查询显示:对于出现在多部电影中的每位演员,请显示所有演员的电影。

另一方面,如果你只是出现在不止一部电影中的演员姓名之后,你只需要一次通过演员。

select c.name, count(c.title) as numfilms
from casting c 
Group by c.name
Having count (c.title) > 1

令人困惑的部分是,如果您只想要名字,为什么要将directortitle添加到SELECT?哪部电影的演员的电影要展现?