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
我正在尝试编写一个 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