【发布时间】:2021-04-29 06:54:53
【问题描述】:
我正在尝试找出制作大多数“神秘”类型电影的年份和电影数量。根据表格样本数据,答案应该是2001年和2年。
下面是用值创建表的代码
CREATE TABLE movie$
(
mov_id int NOT NULL,
mov_title varchar(50) NOT NULL,
mov_year int
);
INSERT INTO movie$ (mov_id, mov_title, mov_year)
VALUES
(1001,'movie1', 2001),
(1002,'movie2', 2001),
(1003,'movie3', 2001),
(1004,'movie4', 2002),
(1005,'movie5', 2003);
CREATE TABLE movie_genres$
(
mov_id int NOT NULL,
gen_id int
);
INSERT INTO movie_genres$ (mov_id, gen_id)
VALUES
(1001, 1),
(1002, 1),
(1003, 2),
(1004, 3),
(1005, 4);
CREATE TABLE Genres$
(
gen_id int NOT NULL,
gen_title varchar(50) NOT NULL
);
INSERT INTO Genres$ (gen_id , gen_title)
VALUES
(1, 'Mystery'),
(2, 'Adventure'),
(3, 'Thriller'),
(4, 'Action');
下面是我要执行的查询
SELECT
movie.mov_year, COUNT(movie.mov_year) AS 'total_movies'
FROM
movie$ movie
JOIN
movie_genres$ m_genres ON m_genres.mov_id = movie.mov_id
JOIN
genres$ genres ON genres.gen_id = m_genres.gen_id
AND genres.gen_title LIKE '%mystery%'
GROUP BY
movie.mov_year
HAVING
movie.mov_year IN (SELECT movie.mov_year mov_yr
FROM movie$ m
WHERE COUNT([mov_year]) = (SELECT MAX(movie_count) maxcount
FROM
(SELECT COUNT([dbo].[movie$].[mov_year]) movie_count
FROM [dbo].[movie$]
GROUP BY movie$.mov_year)))
我没有得到我在放置别名时错过的地方,因为它在最后一个括号中显示错误,而且它没有在 MAX 函数中获取 movie_count 别名的值。
请指导。
【问题讨论】:
-
你的表名真的以
$结尾吗? -
@TimBiegeleisen 是的,我会更新它们,请您让我知道您对我面临的问题的建议。
-
你说你在上一个问题中解决了这个问题?您的别名位于最后两个括号之间,如果您将其布置得更好(而不是内联),它就会变得很明显。
标签: sql sql-server syntax subquery max