简体   繁体   English

如何在一个SQL中执行两个不同的计数

[英]How to do two different count in one sql

How can do two different count in one table? 如何在一个表中进行两个不同的计数? The two different count functions count different columns. 两种不同的计数功能对不同的列进行计数。

Simplified Table: 简化表:

id,creatorId,resolverId
'1','1','2'
'2','1','2'
'3','2','2'
'4','2','1'

What I want to do is putting the creatorId,COUNT(creatorId),resolverId,COUNT(resolverId) into one table. 我要做的是将creatorId,COUNT(creatorId),resolverId,COUNT(resolverId)放入一个表中。 Like: 喜欢:

creatorId,COUNT(creatorId),resolverId,COUNT(resolverId)
'1','2','1','1'
'2','2','2','3'

I only passed the test of putting them in 2 columns by using UNION, and I tried JOIN but it is illegal to MySQL. 我只通过了使用UNION将它们分为2列的测试,并且尝试了JOIN,但对MySQL而言是非法的。

SELECT creatorId, COUNT(creatorId)
FROM issue AS a 
GROUP BY creatorId
join(
SELECT resolverId, COUNT(resolverId) 
FROM issue AS b
GROUP BY resolverId)
WHERE a.creatorId = b.resolverId;

The error info is: 错误信息是:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'join( SELECT resolverId, COUNT(resolverId) FROM issue AS b GROUP BY resolverId)' at line 4 0.00034 sec

Can anyone tell me how to deal with it? 谁能告诉我该如何处理? or give me a example? 还是举个例子? Thank you! 谢谢!

you could jon this way 你可以这样乔恩

select  a.creatorId,COUNT(acreatorId), resolverId, count_resolved_id
from issue a
inner join (
  SELECT resolverId, COUNT(resolverId)  count_resolved_id
  FROM issue AS b
  GROUP BY resolverId
) t on t.resolverId = a.creatorId
group by a.creatorId,COUNT(acreatorId)
select  a.creatorId,COUNT(a.creatorId), t.resolverId, count_resolved_id
from issue a
inner join (
  SELECT b.resolverId, COUNT(b.resolverId)  count_resolved_id
  FROM issue AS b
  GROUP BY resolverId
) t on t.resolverId = a.creatorId
group by a.creatorId;

If I understand correctly, then one way of doing this is an aggregation after a union all : 如果我理解正确,那么一种方法是在union all合并之后进行聚合:

select id, sum(creator) as creator_cnt, sum(resolver) as resolver_cnt
from ((select creator_id as id, 1 as creator, 0 as resolver
       from issue
      ) union all
      (select resolver_id as id, 0 as creator, 1 as resolver
       from issue
      )
     ) cr
group by id;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM