Mysql Sql计数返回错误的数字
我有一个api,我调用它,我需要来自不同表的大量数据,所以我对它们使用联接,现在的问题是,虽然我有4个回复,5个交互,但数据总是返回20个回复和20个交互,这就是结果:Mysql Sql计数返回错误的数字,mysql,sql,left-join,Mysql,Sql,Left Join,我有一个api,我调用它,我需要来自不同表的大量数据,所以我对它们使用联接,现在的问题是,虽然我有4个回复,5个交互,但数据总是返回20个回复和20个交互,这就是结果: screen_name screen_state replies interactions alerts sjerd 0 20 20 0 我使用此查询统计记录和结果: SELECT u.screen_name, u.screen_stat
screen_name screen_state replies interactions alerts
sjerd 0 20 20 0
我使用此查询统计记录和结果:
SELECT u.screen_name,
u.screen_state,
count(r.id) AS replies,
count(i.id) AS interactions,
count(a.alerts) AS alerts
FROM users u
LEFT JOIN reply r ON u.id = r.user
LEFT JOIN interactions i ON u.id = i.user_id
LEFT JOIN alerts a ON u.id = a.user_id WHERE u.id ='2'
GROUP BY u.id, u.screen_state
有人知道为什么回复表中总共只有7行回复,却返回了20行吗,
交互表中共有5行交互。
每行是1个反应或回复 由于所有表都在同一级别上联接,因此您的计数总是会给出相同的结果 您需要将计数作为内联子查询(或其他什么-我永远记不起正确的术语):
谢谢,这就成功了。您知道如果我不添加distinct,为什么它会返回比表中更多的行吗?不客气,请将r.id、i.id、a.alerts添加到您的查询中。查看结果集(暂时删除组)。
SELECT u.screen_name,
u.screen_state,
(select count(*) from reply r where u.id = r.user) AS replies,
(select count(*) from interactions i where u.id = i.user_id) AS interactions,
(select count(*) from alerts a where u.id = a.user_id) AS alerts
FROM users u
WHERE u.id ='2'
SELECT u.screen_name, u.screen_state,
count(DISTINCT r.id) AS replies,
count(DISTINCT i.id) AS interactions,
count(DISTINCT a.alerts) AS alerts
FROM users u
LEFT JOIN reply r ON u.id = r.user
LEFT JOIN interactions i ON u.id = i.user_id
LEFT JOIN alerts a ON u.id = a.user_id WHERE u.id ='2'
GROUP BY u.id, u.screen_state