COUNT returns 所有行的数量,即使是用 except 排除的行

COUNT returns the number of all rows even the one excluded with except

我正在尝试编写一个 sql 查询,其中所需的输出是 176 行

这里是查询:


SELECT name FROM people WHERE id IN(SELECT person_id FROM stars WHERE movie_id IN (SELECT id FROM movies WHERE id IN ( SELECT movie_id FROM stars WHERE person_id = (SELECT id FROM people WHERE birth = 1958 AND name = 'Kevin Bacon'))))EXCEPT SELECT name FROM people WHERE name = "Kevin Bacon";

我得到了正确的输出,但是当我检查代码以计算行数时(我用 COUNT(name) 替换名称)COUNT returns 177,因为它不排除行数除了声明。

有什么方法可以让 count 考虑 EXCEPT 语句吗??? 这里有更多信息:

这是问题集 https://cs50.harvard.edu/x/2020/psets/7/movies/ 我卡在 13.sql

.schema returns

CREATE TABLE movies (
                    id INTEGER,
                    title TEXT NOT NULL,
                    year NUMERIC,
                    PRIMARY KEY(id)
                );
CREATE TABLE stars (
                movie_id INTEGER NOT NULL,
                person_id INTEGER NOT NULL,
                FOREIGN KEY(movie_id) REFERENCES movies(id),
                FOREIGN KEY(person_id) REFERENCES people(id)
            );
CREATE TABLE directors (
                movie_id INTEGER NOT NULL,
                person_id INTEGER NOT NULL,
                FOREIGN KEY(movie_id) REFERENCES movies(id),
                FOREIGN KEY(person_id) REFERENCES people(id)
            );
CREATE TABLE ratings (
                movie_id INTEGER NOT NULL,
                rating REAL NOT NULL,
                votes INTEGER NOT NULL,
                FOREIGN KEY(movie_id) REFERENCES movies(id)
            );
CREATE TABLE people (
                id INTEGER,
                name TEXT NOT NULL,
                birth NUMERIC,
                PRIMARY KEY(id)
            );

要使 except 起作用,EXCEPT 两边的参数必须相同。此时获取计数的最佳方法是包装整个查询以获得派生的 table 因此名称 'Kevin Bacon' 可以是 'excepted' 然后从派生的 'excepted' 中请求计数=15=].

Select count(1)
From (
SELECT name FROM people 
WHERE id IN(SELECT person_id FROM stars 
WHERE movie_id IN (SELECT id FROM movies
WHERE id IN ( SELECT movie_id FROM stars 
WHERE person_id = (SELECT id FROM people 
WHERE birth = 1958 AND name = 'Kevin Bacon'))))
EXCEPT SELECT name FROM people WHERE name = 'Kevin Bacon'
) as A