查看我在此提琴中的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