2017-08-03 41 views
0

这里是我的查询:当有LIMIT和JOIN子句时,如何计算所有行的数量?

select u.id, u.name, 
     (select count(*) from users where name = u.name) as total 
from users u 
where u.name = 'anything' 
order by id 
limit 1 

如你所知,我查询返回具有anything 1个用户。并且total包含具有anything名称的所有用户的数量。好吧,一切都好。


现在我想做同样的事情时有三个JOIN S IN查询。请设想这样的:

select u.id, u.name, sum(r.reputation) rep 
from users u 
join reputation r on u.id = r.user_id 
join posts_tags pt on r.post_id = pt.post_id 
join tags t on pt.tag_id = t.id 
where u.name = 'anything' and t.name = 'mytag' 
group by u.id, u.name 
order by rep desc, u.id 
limit 1 

现在我想知道,我怎么能实现这个^查询total一部分?

+0

'first'和'second'查询的结果是什么? –

+0

@chiragsatapara两个都返回一行*(拥有'anything'名字的用户)*,但第二个返回在特定标签中拥有更多声望的用户,并且他的名字是'anything'。 –

+0

这个答案对您有帮助吗? –

回答

0

试试这个问题,希望这会给你正确的结果。

select * , count(id) as total from (select u.id, u.name, sum(r.reputation) rep 
     from users u 
     join reputation r on u.id = r.user_id 
     join posts_tags pt on r.post_id = pt.post_id 
     join tags t on pt.tag_id = t.id 
     where u.name = 'anything' and t.name = 'mytag' 
     group by u.id, u.name 
     order by rep desc, u.id 
     limit 1) as result