2017-07-05 36 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