2017-07-05 38 views
1

查看我在此提琴中的SQL查詢:sql fiddleSQL查詢以正確順序顯示2列

我想從SQL查詢中獲得什麼?

正如你所看到的,我在recommendations表中插入3件東西。

  1. recommendations_tmdb_id
  2. recommendations_title
  3. recommendations_vote_average

我用recommendations_tmdb_idrecommendations表連接到`tmdb_movies表

我想顯示recommendations_titlerecommendations_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小提琴,這是數據如何迴應

enter image description here

問題與此代碼:

問題一:

仔細看看代碼。第二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 
+0

下降,由聚集DISTINCT保住兩艘聚集對準 – Serg

+0

然後所有的記錄將是相同的。例如:如果第一條記錄是「黑暗騎士崛起」並且評分是「7.5」,那麼所有10條記錄將是相同的@Serg – Toby

+0

查看答案,它們是不同的。 – Serg

回答

1

降DSTINCT從GROUP_CONCAT()

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(recommendations.recommendations_vote_average) as recommendations_vote_average 
,GROUP_CONCAT(recommendations.recommendations_title) as recommendations_title 
FROM tmdb_movies ; 

返回

movie_title recommendations_vote_average recommendations_title 
1 The Dark Knight 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 

http://rextester.com/NNJA85394

+0

固定的SQL小提琴鏈接:http://rextester.com/HWASZ21729 Btw你測試了代碼嗎?如果我刪除了'DISTINCT',所有的數據都是一樣的,比如'7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,'和'黑暗騎士升起,黑暗騎士升起,黑暗騎士崛起,黑暗騎士崛起,黑暗騎士崛起,黑暗騎士崛起,黑暗騎士崛起,黑暗騎士崛起,黑暗騎士崛起,黑暗騎士崛起,' – Toby

+0

是的,它回報到我所知道的張貼在答案中 – Serg