我在试着计算每部电影的语言数量。我有一张movies桌子
id | movies
1 | movie-1
2 | movie-2
3 | movie-3
4 | movie-4和表languages
id | movie_id | language
1 | 1 | english
2 | 1 | german
3 | 1 | english
4 | 1 | french
5 | 1 | dutch
6 | 1 | polish
7 | 1 | russian
8 | 1 | french
9 | 2 | french
10 | 2 | italian
11 | 2 | englishmovie-1的期望结果是6(法语、俄语、波兰语、英语、荷兰语)。电影-1有6种语言。对于movie-2,结果将是3(法语、意大利语、英语)。
下面是我的查询尝试,但没有返回所需的结果:
SELECT COUNT(a3.language)
FROM movies a2
JOIN languages a3 on a3.movie_id=a2.id
GROUP BY a3.language我该如何解决?
发布于 2020-07-03 09:19:20
您需要计算不同的语言,并按movie_id而不是language进行分组
SELECT m.id, COUNT(DISTINCT l.language) AS languages
FROM movies m
JOIN languages l ON l.movie_id = m.id
GROUP BY m.id输出:
id languages
1 6
2 3Demo on SQLFiddle
发布于 2020-07-03 09:54:04
SELECT a2.id, COUNT(DISTINCT a3.language)
FROM movies a2
JOIN languages a3 ON a3.movie_id = a2.id
GROUP BY a2.id这里需要记住的重要一点是,我们不是对聚合器函数的结果使用group by,而是对列使用group by。在此示例中,我们按电影id分组,而不是语言计数。
对于一个电影id,你想要得到所有的语言,那么group by应该在电影Id上,另一方面,如果你必须按语言找出电影的数量,那么你将通过对电影id应用count来对语言进行分组。
https://stackoverflow.com/questions/62707077
复制相似问题