我有以下内容:
SELECT nominees.personname, awards.name as awards, nominees.filmname
FROM nominees, awards WHERE nominees.aid = awards.aid and nominees.personname is not
NULL GROUP BY nominees.personname, awards.name, nominees.filmname
ORDER BY nominees.personname;
这会产生下表:
"personname" "awards" "filmname"
"Ang Lee" "director" "Life of Pi"
"Anglelina J." "actress" "The Tourist"
"Ann Dowd" "supporting actress" "Compliance"
"Anne Hathaway" "actress" "Love and Other Drugs"
"Anne Hathaway" "supporting actress" "Les Misrables"
"Annette Bening" "actress" "The Kids Are All Right"
"Another Year" "screenplay" "Mike Leigh"
"A.R. Rahman" "score" "127 Hours"
"AR Rahman" "score" "127 Hours"
"Barbara Hershey" "supporting actress" "Black Swan"
"Ben Affleck" "actor" "Argo"
"Ben Affleck" "director" "Argo"
我正在尝试获取仅包含因同一部电影获得两个不同奖项提名的人的集合。在这个特定的表中,只有“Ben Affleck”。
结果应该是
"personname" "awards" "filmname"
"Ben Affleck" "actor" "Argo"
"Ben Affleck" "director" "Argo"
但我似乎无法理解,我已尝试使用 HAVING 和某种计数方法,但无法使其正常工作。感谢您的帮助。
最佳答案
这是一个简单的聚合查询。让这个人做:
select personname, filmname
from (SELECT nominees.personname, awards.name as awards, nominees.filmname
FROM nominees, awards WHERE nominees.aid = awards.aid and nominees.personname is not NULL
GROUP BY nominees.personname, awards.name, nominees.filmname
) t
group by personname, filmname
having count(*) > 1
您可以根据原始数据来表达这一点,并在一行中获取列表:
SELECT nominees.personname, nominees.filmname, array_agg(awards.name) as listOfaward
FROM nominees join
awards
on nominees.aid = awards.aid
where nominees.personname is not NULL
GROUP BY nominees.personname, nominees.filmname
having COUNT(distinct awards.name) > 1
要为每个奖项获得单独的行,您可以连接回原始数据:
select personname, filmname, a.name
from (SELECT nominees.personname, nominees.filmname, array_agg(awards.name) as listOfaward
FROM nominees join
awards
on nominees.aid = awards.aid
where nominees.personname is not NULL
GROUP BY nominees.personname, nominees.filmname
having COUNT(distinct awards.name) > 1
) l join
nominees n
on n.personname = l.personname and n.filmname = l.filmname join
awards a
on n.aid = a.aid
关于SQL计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15233611/