我现在遇到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上有索引。但是如果我上面的查询完全错误,这个问题可能会自行解决;)我真的希望有人可以帮助我,我真的不知道什么是错的。
答案 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”子句的子查询是导致性能降低的最可能原因。尽可能避免这些。当它不可避免时,您需要将索引添加到用作连接一部分的任何列,以提高性能。