首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL计算JOIN中的非重复值

MySQL计算JOIN中的非重复值
EN

Stack Overflow用户
提问于 2020-07-03 09:11:17
回答 2查看 26关注 0票数 0

我在试着计算每部电影的语言数量。我有一张movies桌子

代码语言:javascript
复制
id  | movies
1   | movie-1
2   | movie-2
3   | movie-3
4   | movie-4

和表languages

代码语言:javascript
复制
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     |  english

movie-1的期望结果是6(法语、俄语、波兰语、英语、荷兰语)。电影-1有6种语言。对于movie-2,结果将是3(法语、意大利语、英语)。

下面是我的查询尝试,但没有返回所需的结果:

代码语言:javascript
复制
SELECT COUNT(a3.language) 
FROM movies a2
JOIN languages a3 on a3.movie_id=a2.id
GROUP BY a3.language

我该如何解决?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-03 09:19:20

您需要计算不同的语言,并按movie_id而不是language进行分组

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
id  languages
1   6
2   3

Demo on SQLFiddle

票数 1
EN

Stack Overflow用户

发布于 2020-07-03 09:54:04

代码语言:javascript
复制
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来对语言进行分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62707077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档