查看我在此提琴中的SQL查询:sql fiddleSQL查询以正确顺序显示2列
我想从SQL查询中获得什么?
正如你所看到的,我在recommendations
表中插入3件东西。
- recommendations_tmdb_id
- recommendations_title
- recommendations_vote_average
我用recommendations_tmdb_id
到recommendations
表连接到`tmdb_movies表
我想显示recommendations_title
和recommendations_vote_average
。
在我原来的代码:我这是如何显示的数据:
The Dark Knight Rises - 7.5
Batman Begins - 7.5
Iron Man - 7.3
The Lord of the Rings: The Return of the King - 8.1
等。
但是为了简单起见,我不希望包括完整的代码,只是所需码。
所以在SQL小提琴,这是数据如何回应
问题与此代码:
问题一:
仔细看看代码。第二recommendations_vote_average
数为7.5
和第二recommendations_title
电影的名字是Batman Begins
所以,这意味着我的代码显示蝙蝠侠电影中有一个vote_average评级7.5
,这是假的。我插入蝙蝠侠开始评分为7.3
而不是7.5。
它显示一些其他电影的评级。所以这意味着,以错误的顺序。
问题号2:
它仅示出了6 vote_average
结果,而不是10。我插入10个记录。 为什么只显示6条记录而不是10条记录?因为我的group_concat行中有DISTINCT
。
如果我删除DISTINCT
会怎么样?然后,它会向所有电影显示7.5
的评分。
那么,我该如何解决这个问题?
预期结果:
recommendations_vote_average recommendations_title
7.5, 7.5, 7.3, 8.1, 8, 7.9, 7.9, 8, 6.6, 6.6 The Dark Knight Rises,Batman Begins,Iron Man,The Lord of the Rings: The Return of the King,The Lord of the Rings: The The Fellowship of the Ring,The Lord of the Rings: The Two Towers,The Matrix,Inception,Iron Man 2,Captain America: The First Avenger
SQL小提琴全码
CREATE TABLE tmdb_movies (
tmdb_id INTEGER NOT NULL PRIMARY KEY,
movie_title TEXT NOT NULL
);
INSERT INTO tmdb_movies (tmdb_id, movie_title) VALUES
(1, 'The Dark Knight');
CREATE TABLE recommendations (
recommendations_tmdb_id INTEGER NOT NULL,
recommendations_title TEXT NOT NULL,
recommendations_vote_average TEXT NOT NULL
);
INSERT INTO recommendations (recommendations_tmdb_id, recommendations_title, recommendations_vote_average) VALUES
(1, 'The Dark Knight Rises', '7.5'),
(1, 'Batman Begins', '7.5'),
(1, 'Iron Man', '7.3'),
(1, 'The Lord of the Rings: The Return of the King', '8.1'),
(1, 'The Lord of the Rings: The The Fellowship of the Ring', '8'),
(1, 'The Lord of the Rings: The Two Towers', '7.9'),
(1, 'The Matrix', '7.9'),
(1, 'Inception', '8'),
(1, 'Iron Man 2', '6.6'),
(1, 'Captain America: The First Avenger', '6.6');
SELECT tmdb_movies.movie_title
,GROUP_CONCAT(DISTINCT recommendations.recommendations_vote_average) as recommendations_vote_average
,GROUP_CONCAT(DISTINCT recommendations.recommendations_title) as recommendations_title
FROM tmdb_movies
LEFT JOIN recommendations ON recommendations.recommendations_tmdb_id=tmdb_movies.tmdb_id
Where tmdb_movies.tmdb_id=1
GROUP BY tmdb_movies.movie_title
下降,由聚集DISTINCT保住两艘聚集对准 – Serg
然后所有的记录将是相同的。例如:如果第一条记录是“黑暗骑士崛起”并且评分是“7.5”,那么所有10条记录将是相同的@Serg – Toby
查看答案,它们是不同的。 – Serg