鉴于我的表之间存在以下关系:
我需要显示只有两名主演的电影的名称,例如“Seconday”。
SELECT act.cod_film,
(SELECT COUNT(act.cod_film) FROM film, act WHERE act.starring like
'Seconday' and act.cod_film=film.cod_film) as namecounter
FROM act;
这总是返回具有“第二” Actor 的电影,但计数始终是相同的数字。我需要每部电影中“第二” Actor 的数量。
如有任何帮助,我们将不胜感激
最佳答案
这将找到具有 2 个“次要” Actor 的电影
SELECT act.cod_film
FROM act
GROUP BY act.cod_film
HAVING SUM(CASE WHEN act.starring like = 'Seconday' THEN 1 ELSE O END) = 2
您可以在这样的子查询中使用它(或以许多其他可能的方式)
SELECT *
FROM FILMS
WHERE cod_film IN (
SELECT act.cod_film
FROM act
GROUP BY act.cod_film
HAVING SUM(CASE WHEN act.starring like = 'Seconday' THEN 1 ELSE O END) = 2
)
或者:您可以在联接中使用这种方式
SELECT *
FROM FILMS
INNER JOIN (
SELECT act.cod_film, COUNT(*) NUM_OF
FROM act
GROUP BY act.cod_film
HAVING SUM(CASE WHEN act.starring like = 'Seconday' THEN 1 ELSE O END) = 2
) A ON FILMS.cod_film = A.cod_film
注释:
like
需要使用通配符才有效,请勿将 equals 替换为 like 它们不是同一事物- 如果您想要最小值,您可以将
=
调整为>=
,如sum(case...) >= 2
2名次要 Actor
关于mysql - COUNT 未返回预期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655705/