MySQL INNER JOIN没有返回正确的结果

时间:2016-01-11 01:16:59

标签: mysql join sum

我现在遇到MySQL查询的问题,我无法弄清楚...希望有人可以在这里给我一个骨头:)

好的,我有2个数据库: user _(...,user_id,followers_count,...) post(...,user_id,artist_id,...)

我想计算一个特定艺术家的潜在追随者范围(计算所有用户谈论特定艺术家的追随者的总和)

这是我到目前为止所做的...它返回了一个错误的值,我不知道为什么(返回的值太低了)。

SELECT SUM(followers_count) FROM
(SELECT u.user_id, u.followers_count, s.artist_id
FROM post s
INNER JOIN user_ u
ON s.user_id=u.user_id
WHERE s.artist_id=10
GROUP BY u.user_id) as T

第二个问题是需要大约15分钟!执行此查询,我在u.user_id和s.user_id上有索引。但是如果我上面的查询完全错误,这个问题可能会自行解决;)我真的希望有人可以帮助我,我真的不知道什么是错的。

2 个答案:

答案 0 :(得分:0)

这是一种没有子查询步骤的方法。我没有包含WHERE子句,但你可以很容易地添加它

SELECT u.user_id, s.artist_id, SUM(u.followers_count) AS potent_reach
FROM post s
INNER JOIN user u ON u.user_id = s.user_id
WHERE s.artist_id=10
GROUP BY u.user_id, s.artist_id

使用一些小的测试数据,它会产生正确的总和。

如果您确实想要使用WHERE artist_id = 10(或某个值)运行查询,则可以删除ORDER BY部分。

答案 1 :(得分:0)

如果我正确理解你的目标,那么类似的东西应该有效: (免责声明:我没有重新创建你的表并用数据填充它们进行测试,因此可能需要稍微调整一下。)

SELECT
  s.artist_id, 
  sum(u.followers_count)
FROM post s
INNER JOIN user_ u
ON s.user_id = u.user_id
WHERE s.artist_id = 10
GROUP BY s.artist_id;

使用带有“Group By”子句的子查询是导致性能降低的最可能原因。尽可能避免这些。当它不可避免时,您需要将索引添加到用作连接一部分的任何列,以提高性能。